ミ,,゚Д゚彡フサギコのフサフサDelphi談話室�B
■ このスレッドは過去ログ倉庫に格納されています
0633625
NGNGまぁ、そうとも言えますが、OSがウィンドウにメッセージをポストするとき
そのウィンドウをつくったスレッドのキューに入れる、ってことですね。
>既にメッセージキューを持っているスレッドなら、新しいウィンドウのイベントもそのキューを使うわけですね。
そうです。動的に TForm2 のインスタンスをつくっても動くのはそのためです。
>で、新しいメッセージのディスパッチルーティンを実行してくれるわけですか。
いえ、ひとつのメッセージキューには、最低ひとつのメッセージループがあれば
よいのです。これは、Delphi の GUI アプリの場合は Application.Run の
中にあります。
>OSはキューにイベントを入れた後、コールバックでディスパッチルーティンを非同期で呼び出す必要があるわけですが
いや、キューにポストして、たんにそのスレッドにタイムスライスを与えてメッセージループ
を回すだけです。メッセージループが、キューからメッセージを取り出して、DispathMessage()
でコールバック関数(ウィンドウ関数)を呼び出します。ですから、GUI アプリの
メインルーチンは、メッセージループだけであり、キューを経由するメッセージはもちろん
SendMessage() で送られたメッセージもすべて、メッセージループのなかの PeekMessage()
または GetMessage() が実行されるタイミングで、メッセージ処理ハンドラが呼び出している
と解釈しても間違いではありません。ハンドラを直接・間接に呼び出しているわけですから、
各ハンドラの処理が終わると、また、メッセージループに制御が戻り、それがまわって
次のメッセージ処理を行なうわけです。
■ このスレッドは過去ログ倉庫に格納されています