有没有办法强制主线程等到从它创建的所有线程完成它们的工作,然后才能完成程序。我的意思是:
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;
}
答案 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
。