QThreadsを利用するマルチスレッドアプリケーションを書いています。スレッドを開始するには、メソッドをオーバーライドし、どこか(私の場合はGUIスレッド)run()
を使用してそのメソッドを呼び出す必要があることを私は知っています。thread.start()
.wait()
しかし、どこかでメソッドを呼び出す必要があり.quit()
、スレッドが終了したら呼び出すことになっているのでしょうか、それとも自動的に行われるのでしょうか。
私はPySideを使用しています。
ありがとう
QThreadsを利用するマルチスレッドアプリケーションを書いています。スレッドを開始するには、メソッドをオーバーライドし、どこか(私の場合はGUIスレッド)run()
を使用してそのメソッドを呼び出す必要があることを私は知っています。thread.start()
.wait()
しかし、どこかでメソッドを呼び出す必要があり.quit()
、スレッドが終了したら呼び出すことになっているのでしょうか、それとも自動的に行われるのでしょうか。
私はPySideを使用しています。
ありがとう
どちらの答えも、コードが何をしているか、そしてスレッドに何を期待しているかによって異なります。
スレッドを使用するロジックがQThreadが終了するまで同期的に待機する必要がある場合は、はい、を呼び出す必要がありますwait()
。ただし、このような要件は、アプリケーションの起動やシャットダウンなどの非常に特殊な状況を除いて、スレッドモデルがずさんな兆候です。の使用は、QThread::wait()
クリーピングシーケンシャル操作を提案します。これは、スレッドを同時に使用していないことを意味します。
quit()
QThreadを終了します-使用が必須ではない内部イベントループ。(1タスクワーカーではなく)長時間実行されるスレッドには、ある種のイベントループが必要です。これは一般的なステートメントであり、QThreadに固有のものではありません。自分で(何らかのwhile(keepRunning) { }
サイクルの形で)実行するか、Qtが提供するイベントループを使用します。このループは、メソッドを呼び出して起動exec()
しますrun()
。前者の実装は、keepRunning
条件を提供したため、ユーザーが完了できます。Qtが提供する実装はあなたから隠されており、ここでquit()
呼び出しが行われます。これは、Qt内にある種の同様のフラグを設定するだけです。