有没有办法强制主线程等到从它创建的所有线程完成他们的工作,然后才能完成程序.我的意思是:
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;
Run Code Online (Sandbox Code Playgroud)
}
Arc*_*hie 10
那么,怎么样:
a.wait();
b.wait();
Run Code Online (Sandbox Code Playgroud)
或者,您宁愿启动一个事件循环(通常用于Qt应用程序),当两个线程结束时(QThread发出finished()和terminate()信号),您将退出.
通常,使用 Qt,您将拥有一个基于 QApplication 的类,该类带有带有信号和槽的事件循环,除非您愿意,否则它不会退出主函数。在这种情况下,您可以简单地将 QThread::finish() 信号连接到检查所有线程是否已完成的插槽。
没有事件循环和信号/插槽,Qt 线程没有其他线程实现中的 join() 方法,但 QThread::wait() 有点相似。
bool QThread::wait(unsigned long time = ULONG_MAX)
Run Code Online (Sandbox Code Playgroud)
阻塞线程,直到满足以下任一条件:
- 与此
QThread对象关联的线程已完成执行(即当它从 返回时QThread::run())。true如果线程完成,此函数将返回。true如果线程尚未启动,它也会返回。time毫秒已经过去。如果 time 是ULONG_MAX(默认值),则等待永远不会超时(线程必须从 返回QThread::run())。false如果等待超时,此函数将返回。
请注意,阻塞主线程被认为是一种糟糕的做法,即使是计算也不行,更不用说等待某些东西了。任何超过几十毫秒的时间都会对用户体验产生不利影响,更高的停顿可能会给你一个来自操作系统的“这个应用程序没有响应”的消息。如果您等待结果,请在另一个线程中等待它,并且只有在完成后才将其传递给主线程。