Как контролировать QThread - PullRequest
       16

Как контролировать QThread

0 голосов
/ 01 ноября 2018

Я работаю над приложением Qt. Там я хотел бы, чтобы рабочий поток выполнял некоторые действия в фоновом режиме, и я хотел бы, чтобы основной поток управлял им, перезапуская рабочий поток, если он по какой-то причине умирает. Я видел сигнал Finish (), испускаемый потоком, поэтому я думаю, что я мог подключить слот к нему.

Это рекомендуемый способ? Если нет, то как мне этого добиться?

Если я использую сигнал Finished (), как я могу узнать разницу между нормальным завершением и ошибкой?

Спасибо и всего наилучшего

1 Ответ

0 голосов
/ 01 ноября 2018

Если вы хотите узнать, была ли у вас ошибка или процесс завершен, просто создайте два сигнала, а не один, и два слота, а не один.

В документации Qt у вас есть пример с подключением для обработки результата:

connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);

вы здесь соединяете сигнал resultReady с любым методом, который обрабатывает результат. Вы создаете еще один точно такой же, но с сигналом ошибки и обработчиком ошибок.

connect(workerThread, &WorkerThread::errorThrown, this, &MyObject::handleErrors);

Конечно, другой вариант - просто передать параметр с вашими сигналами / слотами. Это вызов функции, и если вы добавите enum с этим значением для статуса или int, это подойдет.

...