2016-10-16 12 views
0

プロジェクトでは、複数のステートマシンをラッパークラスに作成しています。各ラッパーは独自のスレッドで実行されます。ジョブが完了すると、ラッパークラスのデストラクタが呼び出され、そこでスレッドを停止します。デストラクタで現在のスレッドを終了

thread.join()を使用している場合は、デッドロックが発生します(それ自体が参加しようとしているため)。私たちは何とか別のスレッドを通知することができますが、それはちょっと乱雑です。

オブジェクトが破壊されたときにクラスが実行されているスレッドを正しく終了させる方法はありますか?

+0

私は、通常_has a_関係のクラスでスレッドを使用しています。このクラスは、スレッド関数内で実行すべき処理を制御するAPIを形成します。 FSMを使用している場合は、私の[STTCL](https://github.com/makulik/sttcl)フレームワークに興味があるかもしれません。 –

+0

もちろん、ラッパーの「ジョブが完了しました」では、対応するスレッド関数は? –

答えて

0

thread.join()スレッドを停止しません。スレッドが終了してから戻るのを待ちます。スレッドを停止するには、スレッドを停止するように指示する何らかの方法が必要で、スレッドが停止するかどうかを確認する必要があります。それを行うための1つの方法は、アトミックブールでです。

これは私の頭の上から外れています。コンパイルされず、テストされません。

関連する問題