Что происходит с QThread, когда приложение закрывается без надлежащего вызова wait ()?
В приведенном ниже примере (внутри приложения Qt GUI) запускается новый поток (с циклом событий, в котором я хочу выполнить некоторую работу):
void doWork()
{
QThread* workerThread = new QThread();
Worker* worker = new Worker();
worker->moveToThread(workerThread);
connect(workerThread, SIGNAL(started()), worker, SLOT(startWork()));
connect(worker, SIGNAL(finished()), workerThread, SLOT(quit()));
connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
workerThread->start();
}
startWork()
может быть длительной операцией, во время которой приложение может быть закрыто.
Я ожидал, что приложение не будет закрыто до тех пор, покаstartWork()
выполняется наworkerThread
, Кажется, однако, что когда я закрываю последнее окно приложения,workerThread
исчезает мгновенно (во время длительной работы) и приложение закрывается без проблем.
Возникли вопросы:
Почему былworkerThread
стереть сразу?Это какая-то проблема родителей / детей?Как Qt справляется с такой ситуацией?Это ошибка программиста, чтобы не звонитьwait()
на QThread (в конце концов)?Даже если так, я пыталсяwait()
внутри слота дляaboutToQuit()
и приложение не былоt закрыт после длительной работы (с настройкой, как указано выше). Толькоquit(); wait();
(внутри упомянутого слота) позволило приложению закрыться. Зачем?