使主线程等到所有其他Qthread完成

时间:2013-03-10 15:39:36

标签: c++ 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 个答案:

答案 0 :(得分:9)

那么,怎么样:

a.wait();
b.wait();

或者,您宁愿启动一个事件循环(通常用于Qt应用程序),当您的两个线程结束时(QThread发出finished()和terminate()信号),您将退出。

答案 1 :(得分:2)

通常,使用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
  •