2013-03-10 242 views
5

有没有办法强制主线程等到所有线程创建完毕后才能完成程序。我的意思是:使主线程等待,直到所有其他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; 

}

回答

6

那么,怎么样:

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

或者,你宁愿启动一个事件循环(如通常用于Qt应用程序),你退出时,您的两个线程结束(QThread发出完成()和终止()信号)。

+1

+1,当你打我的时候,我正在写这篇文章。 [这是关于QThread :: wait]的文档(http://qt-project.org/doc/qt-4.8/qthread.html#wait) – tmpearce 2013-03-10 15:52:09

+0

@tmpearce对不起,关于:)对,Qt文档是最好的地方先看看。 – Archie 2013-03-10 15:53:59

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