1

QThread::terminate()ドキュメントには、この関数を呼び出してスレッドを終了することは推奨されないと記載されています。
私のプログラムでは、実行が終了する前にスレッドを終了する必要があります。スレッドが負荷の高い計算を実行しているため、ユーザーが計算を停止できるようにしたいと考えています。
を呼び出す代わりに、どうすればそれを行うことができQThread::terminate()ますか?

4

3 に答える 3

10

スレッド内の計算でチェックするスレッド外からフラグを設定し、フラグが設定されている場合は計算を停止します。

于 2009-08-24T07:39:45.537 に答える
1

フラグを使用するのは明白で最も一般的な方法ですが、Linux/Unix プラットフォームで作業している場合は、代わりにパイプを使用することをお勧めします。フラグを使用した場合と同じ問題がありました (これにより、コードがスレッドセーフではなくなり、そのようなフラグから発生するバグを追跡するのが難しくなります)、必要なことを行うための効率的な方法であるパイプを使用するように実装を変更しました。

必要に応じて、Linux プラットフォームの場合、パイプを使用して QThread を終了する方法を紹介できます。

パイプに相当する Windows もあるかもしれませんが、私は Windows プラットフォームでのプログラミングをあまり行っていないので、これについてはあまり知りません。

お役に立てれば

于 2009-08-24T11:13:06.680 に答える
1

ソリューションをスレッド セーフにするフラグ + ミューテックスを使用することをお勧めします。

于 2011-04-26T07:31:49.697 に答える