私は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. お互いを待っているスレッド
- 2. Androidスレッド - 別のスレッドからスレッドを実行し、ハンドラメッセージを待っています
- 3. タスクを待っている並行スレッド
- 4. メインスレッドは新しいスレッドを待っています
- 5. Windowsサービスでタイマーを待っているスレッドをシャットダウンします。
- 6. popenを待っているpythonスレッドを停止しますか?
- 7. Windows C++スレッドがデータキューを待っています
- 8. 別のスレッドでユーザー入力を待っています
- 9. Pythonのスレッド(参加()終了するスレッドを待っていない?)
- 10. Javaスレッドのダンプ: "ロックするのを待っていない..."
- 11. ソケットからIOを待っているスレッドを中断していますか?
- 12. ファイルをコピーするのを待っているPythonスレッド
- 13. 非同期は - 待って - スレッドが
- 14. メソッドは、いくつかのスレッドを待っていると通知します
- 15. Async - 別のスレッドを実行するのを待っていますか?
- 16. C++ 11スレッド:条件変数を待っている複数のスレッド
- 17. async/UIスレッドに戻って待たないでください
- 18. スレッドを待っているC#マルチスレッドの問題
- 19. 複数のスレッドを待っているC++
- 20. TCPを待っているスレッドに命令を送信しますか?
- 21. スレッドがイベントを待っているかどうかを検出します。
- 22. はTask.WhenAll対選択を待っています(async .. =>待っています)
- 23. スレッドをブロックしないで待機しますか? - どうやって?
- 24. C++割り込みスレッドがユーザー入力を待っています
- 25. サーバがユーザ名を待っているのを待っています
- 26. 他のスレッドが実行されるのを待っているUIスレッド - 動作していない
- 27. タスクを待っている:タスクを返すか、コードがないのを待ってから待ちます
- 28. スレッドはインテントを待ってインテントを送信することをブロックします
- 29. AndroidでsetPadding()を待っています
- 30. angularJS画像を待っています
イベントは必要ありません。スレッドはWindowsで待機可能なオブジェクトです。 – Hasturkun
ええ、私はそれを忘れて、それに応じて答えを変更しました。 :) – macbirdie