2013-03-10 156 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