如何在主线程中等待所有工作线程在Qt中完成?

时间:2010-02-02 06:28:44

标签: multithreading qt

我设计了一个运行20个线程实例的应用程序。

for(int i = 0;i<20;i++)
{
    threadObj[i].start();
}

我怎样才能在主线程中等待这20个线程完成?

3 个答案:

答案 0 :(得分:6)

您需要使用QThread::wait().

  

bool QThread :: wait(unsigned long time = ULONG_MAX)

     

阻止线程直到   符合这些条件:

     
      
  • 与此相关的线程    QThread 对象已完成执行(即从它返回时)   运行()的)。如果线程已完成,此函数将返回true。它   如果线程有,则返回true   尚未开始。

  •   
  • 时间毫秒已过。如果时间到了    ULONG_MAX (默认值),然后是等待   永远不会超时(线程必须   从 run()返回。这个功能   如果等待时间,将返回 false   进行。

  •   
     

这提供了类似的功能   POSIX pthread_join()函数。

只需遍历线程并为每个线程调用 wait()

for(int i = 0;i < 20;i++)
{ 
    threadObj[i].wait(); 
}

如果你想在等待时让主循环运行。 (例如,处理事件并避免使应用程序不负责任。)您可以使用信号&amp;线程的插槽。 QThread 有一个 finished()信号,你可以连接到一个记住哪些线程已经完成的插槽。

答案 1 :(得分:2)

您也可以使用QWaitCondition

答案 2 :(得分:1)

格奥尔格所说的是正确的。还记得你可以从跨线程调用信号槽。因此,您可以让线程在完成后向您发出信号。因此,您可以跟踪已完成任务/已退出的线程。如果您不希望主线程进入阻塞调用等待,这可能很有用。