2013-03-10 24 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はfinished()とterminated()シグナルを出力します)。

+1

+1私はあなたが私にそれを打つとき、私はこれを書いている過程にいました。 [Qthread :: waitのドキュメントはこちらです。](http://qt-project.org/doc/qt-4.8/qthread.html#wait) – tmpearce

+0

@tmpearceごめんなさい。:)そして、Qt docsは、まず見てください。 – Archie

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を返します。
関連する問題