スレッドのセットを同期しようとしています。これらのスレッドは、ほとんどの場合、自分の予定された仕事をするために目を覚ます。私はstd::thread
を使っています。std :: condition_variable(ロックなし)
私はアプリケーションスレッドを終了すると、終了しないようにしています。 C#ではスレッドをbackground
にすることができますので、アプリの終了時にtermiantedになります。 C++ではequavalint機能が利用できないようです。
私は一種のイベントインジケータを使用して、アプリケーション終了時にスレッドを起動させることにしました。標準C++ 11 std::condition_variable
は一意のロックを必要とするので、私は両方のスレッドが同時に起動する必要がある(リソースを共有しない)ので、使用できません。
最終的に、問題を解決するためにWinApiのCreateEvent
+ SetEvent
+ WaitForSingleObject
を使用することにしました。
私はちょうどC++ 11を使用して同じ動作を達成する方法がありますか?再び
、私が何をしたいです:
- スレッドのセットは、独立して作業し、通常、特定の期間のために 眠っているされている(別のスレッドのために異なる可能性があります。
すべてthredsは変数をチェック。それは(私は、この変数
IsAliva
を呼び出す)動作を停止する時間である かどうか、それらのすべてのために空くです 実際にすべてのスレッドは、次のようにループ内で回転している:while (IsAlive) { // Do work std::this_thread::sleep_for(...); }
- スレッドは、互いにブロックしないで同時に動作することができなければなりません。
- アプリが終了してイベントが発生して、今すぐにスレッドを 目覚めさせても、タイムアウトには関係ありません。
- が起動すると、
IsAlive
をチェックして終了します。
ポイント4と5は分かりません。 – Zereges
イベントによって、タイムアウトが終了する前にスレッドが起きるようになります。 – Ivan
* "彼らはリソースを共有しません" *と* "すべてのスレッドは変数をチェックします[..]' IsAlive' "*は互換性がありません。 – Jarod42