Заставляя основной поток ждать, пока все остальные Qthread закончат
есть ли способ заставить основной поток ждать, пока все потоки, созданные из него, закончат свою работу, прежде чем закончить программу. Я имею в виду:
int main(){
QthreadClass a; // in cons' a thread is created and running
QthreadClass b; // same as before
*** wish to wait till both created thread finished their jobs ***
return 0;
}
2 ответов
Ну, а насчет:
a.wait();
b.wait();
или вы предпочтете запустить цикл событий (как обычно для приложений Qt), который вы выходите, когда оба ваших потока заканчиваются (QThread испускает сигналы finished () и terminated ()).
обычно с Qt у вас будет класс на основе QApplication с циклом событий с сигналами и слотами, который не выйдет из основной функции, пока вы не захотите. В этом случае вы можете просто подключить сигнал QThread::finish() к слоту, который проверяет, выполнены ли все потоки.
без цикла событий и сигналов / слотов потоки Qt не имеют метода join (), найденного в другой реализации потоков, но QThread::wait() несколько похож.
bool QThread::wait(unsigned long time = ULONG_MAX)
блокирует поток, пока не будет выполнено любое из этих условий:
- поток, связанный с этим
QThread
объект завершил выполнение (т. е. когда он возвращается изQThread::run()
). Эта функция будет возвращатьtrue
если поток закончился. Он также возвращаетtrue
если поток еще не началась.time
миллисекунд прошло. Если времяULONG_MAX
(по умолчанию), тогда ожидание никогда не будет таймаутом (поток должен вернуться отQThread::run()
). Эта функция будет возвращатьfalse
если время ожидания истекло.