ループを使用する場合 (特に C++ で)、それらはすべて独自のスレッドを作成しますか? 存在している間、どのループがメインスレッドの実行を制御するのではなく、どのループが独自のスレッドを作成しますか?
編集: 継続的に実行されるメッセージ ループについてはどうですか? 継続的なループであるため、メッセージ ループの実行後にプログラム内に存在しても何も妨げられないのはなぜですか?
ループを使用する場合 (特に C++ で)、それらはすべて独自のスレッドを作成しますか? 存在している間、どのループがメインスレッドの実行を制御するのではなく、どのループが独自のスレッドを作成しますか?
編集: 継続的に実行されるメッセージ ループについてはどうですか? 継続的なループであるため、メッセージ ループの実行後にプログラム内に存在しても何も妨げられないのはなぜですか?
for
-loopsや-loopsなどのループは、while
スレッドを作成しません。メインスレッド(またはコードのどこかで開始された他のスレッド)は、コードの他のすべての部分を実行できるのと同じようにループに入ることができますが、ループに入った結果として新しいスレッドが開始されることはありません。
ループと同様の方法で使用できるテンプレートを提供する特別なライブラリがありますparallel_for
。これらは開始スレッド(または同様の種類の並列処理)になりますが、実際には関数テンプレート(またはクラステンプレート)であり、言語標準で定義されているループステートメントではありません。
コメント後の編集:以下のコメントで参照するメッセージループ
の特定の例では、メインスレッドがループに入る前に、ウィンドウ(別々のスレッドからのイベントに反応する)および場合によっては他のさまざまなスレッドが作成されるという考え方です。次に、WM_QUIT
メッセージが受信されるまでループが実行されGetMessage
、ブール値に相当するものが返されfalse
ます。
したがって、ループはメインスレッドで実行されますが、受信するメッセージは個別のスレッドによって生成され、ループに入る前に(システムまたはユーザーによって)作成および開始されます。