通常、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
待機がタイムアウトした場合、この関数は戻ります。
メインスレッドをブロックすることは、計算を行っても、何かを待つだけではなく、ひどい習慣と見なされていることに注意してください。数十ミリ秒を超えると、ユーザーエクスペリエンスに悪影響を及ぼします。ストールが大きくなると、OSから「このアプリが応答していません」というメッセージが表示される可能性があります。結果を待つ場合は、別のスレッドでそれを待ち、完了したらメインスレッドにのみ渡します。