QThreadから直接継承するのではなく、workerオブジェクトを使用してmoveToThreadでスレッドに移動する必要があることを読んでいます。しかし、オブジェクト ワーカーでループを停止する方法が見つかりません。たとえば、テストループがあります:
void CollectionWorker::doWork()
{
for (int i = 0; i < 10; ++i) {
sleep(1);
emit ping(i);
}
}
今、私はこのオブジェクトをスレッドに移動しています:
worker->moveToThread(mTh);
これはうまくいっています。しかし、mTh.quit() を呼び出すと、スレッドは doWork のループが終了するまで待機しています。QThread から直接継承すると、各ループでスレッドのステータスを確認し、スレッドが終了したときにループを中断できますが、ワーカー オブジェクトでそれを行う方法がわかりません。ワーカー オブジェクトにフラグを作成して、メイン スレッドから切り替えることはできますか? または、スレッドの所有者を見つけてステータスを確認できますか? または、スレッドを開始する前に、ワーカー オブジェクトにスレッド ポインタを設定してから、ステータスを確認することをお勧めします。最適なスレッド セーフ ソリューションは何ですか?
よろしく