Windowsプログラムでのメッセージループ
Microsoft Visual C++6.0でWin32ApplicationでWindowsプログラムを作る勉強を始めました。
『Visual C++ 1 はじめてのWindowsプログラミング』(山本信雄 著)
という本で勉強しています。
WinMain函數の中に次のような「メッセージループ」というものがあるんですね。
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
本の説明では
「メッセージループとは、GetMessageでメッセージの有無を常に確認しつづけるループです。Windowsプログラムは、何もしていないように見えるときでも常にメッセージループをじっこうしているのです。」
ということです。
また
「もしもメッセージがなければ、GetMessageは他のアプリケーションに処理を讓ります。これによってWindowsのマルチタスクがじつげんされています。」
ともありました。
私が思ったのは、
他のアプリケーションに処理を讓ってしまったら、上の説明にあるような「常にメッセージループをじっこうしている」ことにはならないんではないか、
ということです。
逆に、メッセージがあり續けたら、他のアプリケーションに処理を讓らないのでしょうか。
WindowsのマルチタスクはGetMessageが行っているのではなくて、WindowsというOSが行っているのではないでしょうか。
GetMessageが他のアプリケーションに処理を讓っている間の状態というのは、GetMessage函數がじっこうされている状態なのでしょうか。それとも、その間プログラムは停止しているのでしょうか。停止しているのだとしたら、再開するのはGetMessageの次のTranslateMessageからでしょうか。
編集部に質問を送ったのですが、返事はありません。
初級者ゆえ何か勘違いしているのかもしれません。
よろしくお願いいたします。
お礼
やはりエラーでした。もう一度、質問をしなおします。ありがとうございました。
補足
ご回答ありがとうございます。C言語のサンプルプログラムをいくつか実行したのですが、違うプログラムを実行しても同じ画面が出力されてループしているのか動かなくなってしまいます。コンパイルエラーして他のプログラムが動いているのかとも思えるのですが、強制終了している間に画面が少し変になるので、実行するのも恐いです。削除してしまいたいのですが…。