むかしむかし、私はこのことを暗記していました。時間が経つにつれて、私の理解は希薄になり、それをリフレッシュするつもりです.
思い出すと、いわゆるシングル スレッド アプリケーションには 2 つのスレッドがあります。
a) メインまたは DllMain エントリ ポイントへのポインタを持つプライマリ スレッド。と
b) いくつかの UI、UI スレッド、別名、WndProc が実行されるセカンダリ スレッド、つまり、Windows がポストするメッセージを受信する WndProc を実行するスレッドを持つアプリケーションの場合。つまり、Windows メッセージ ループを実行するスレッドです。
UI アプリの場合、プライマリ スレッドは Windows からのメッセージを待機しているブロック状態にあります。それらを受信すると、それらをキューに入れ、メッセージ ループ (WndProc) にディスパッチし、UI スレッドが開始されます。
私の理解によると、ブロッキング状態にあるプライマリスレッドは次のとおりです。
C++
while(getmessage(/* args &msg, etc. */))
{
translatemessage(&msg, 0, 0);
dispatchmessage(&msg, 0, 0);
}
C# または VB.NET WinForms アプリ:
Application.Run( new System.Windows.Forms() );
これは彼らがディスパッチャーと呼んでいるものですか?
私の質問は次のとおりです。
a) 上記の理解は正しいですか?
b) Dispatcher とはいったい何者なのか?
c) Windows/Win32 の観点からスレッドをよりよく理解し、それを C# などの高水準言語と結びつけることができるリソースを教えてください。Petzold は、彼の壮大な作品の主題に関する彼の議論で控えめです。
私はそれがある程度正しいと信じていますが、確認は安心します.