Заставляя основной поток ждать, пока все остальные 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 если время ожидания истекло.