私は4スレッド用にCreateThread()を使用しています。
すべてのスレッドを同時に実行したいが、メインスレッドを続行する前にすべての4が終了するのを待つ。
私はintを使用し、スレッドの始めでそれを増やしてから最後に減らしてから、メインスレッドでは一定の値を超えている間にwhileループを使用して保持しました...しかし、正しく動作しているようです。
これは可能ですか?スレッドを待っています
2
A
答えて
1
signaled statesとWaitForMultipleObjectsの機能を使用すると、イベントやスレッド自体(シグナルハンドラが指す)がシグナル状態になるのを待つことができます。
これらのスレッド間で単一の変数を共有するだけで、おそらくCPUのコアに分散しているときに、おそらく同期の問題が発生している可能性があります。
同期メカニズムを使用せずに共有値をアトミックに変更する場合は、問題がないことは完全には保証されませんが、InterlockedIncrementのような「インターロックされた*」関数を使用してください。とにかくその方法を同期メカニズムとして使用しないでください。
0
を使用でき すべての子スレッドがその後、自分の仕事を完了するまで、あなたのメインスレッドが待機することにしたい場合:
編集:
ああ、それはWindowsプラットフォームであります(前に気付かなかったので)使用する必要があります。
7
WaitForMultipleObjects
とbWaitAll
フラグをすべてのスレッドハンドルに使用してください。すべてのスレッドが終了すると、この関数が戻ります。
0
4つのスレッドを作成し、返された4つのハンドルのWaitForSingleObject
を順番に呼び出してください。 4つのスレッドがExitThread
を呼び出して終了することを確認してください。
EDIT:
または、Hasturkunの答えで指摘したように、WaitForMultipleObjects
を使用して...それは賢いだろう。 :-)
関連する問題
- 1. Androidスレッド - 別のスレッドからスレッドを実行し、ハンドラメッセージを待っています
- 2. メインスレッドは新しいスレッドを待っています
- 3. popenを待っているpythonスレッドを停止しますか?
- 4. Windowsサービスでタイマーを待っているスレッドをシャットダウンします。
- 5. Windows C++スレッドがデータキューを待っています
- 6. 別のスレッドでユーザー入力を待っています
- 7. Javaスレッドのダンプ: "ロックするのを待っていない..."
- 8. ソケットからIOを待っているスレッドを中断していますか?
- 9. ファイルをコピーするのを待っているPythonスレッド
- 10. メソッドは、いくつかのスレッドを待っていると通知します
- 11. C++ 11スレッド:条件変数を待っている複数のスレッド
- 12. TCPを待っているスレッドに命令を送信しますか?
- 13. スレッドがイベントを待っているかどうかを検出します。
- 14. スレッドをブロックしないで待機しますか? - どうやって?
- 15. タスクを待っている:タスクを返すか、コードがないのを待ってから待ちます
- 16. Node.jsでイベントを待っています
- 17. 別のアプリケーションウィンドウを待っています
- 18. バッチスクリプトのフォルダを待っています
- 19. Googleマップジオコーダを待っていますか?
- 20. ホーム( 'android.process.acore')を待っています
- 21. AndroidでsetPadding()を待っています
- 22. 他のスレッドが実行されるのを待っているUIスレッド - 動作していない
- 23. observableで待っています
- 24. アンドロイドアプリで待っています
- 25. 待ち、私はこのように変更するブール値を待つスレッドを持っている状態
- 26. execlpを待っている
- 27. ジョインを使用してスレッドが終了するのを待っています。かなり基本的です
- 28. asyncは待たずに待っています
- 29. executor service pool(JAVA)からスレッドを待っているジョブの数を調べる
- 30. スレッドはロックFIFOで待機していますか?
イベントは必要ありません。スレッドはWindowsで待機可能なオブジェクトです。 – Hasturkun
ええ、私はそれを忘れて、それに応じて答えを変更しました。 :) – macbirdie