SendMessage
& PostMessage
とすると、メッセージはSend/PostMessage
と同じ順番で処理されます。しかし、documentによれば、SendMessage
は現在のスレッドが正しいものであればその関数を実行します。WindowsのメッセージキューはFIFO形式でメッセージを処理していますか?
呼び出し元のスレッドによって指定されたウィンドウが作成された場合は、ウィンドウ プロシージャがサブルーチンとしてただちに呼び出されます。
だから、次のような場合には:
PostMessage(currentThreadWindow, postMsg, ...) // line 1
SendMessage(currentThreadWindow, sendMsg...) // line 2
sendMsg
はpostMsg
前に処理されます。
メッセージはSendMessage
とPostMessage
に転送されるので、注文を受け取りますか?
すでに注文が維持されていない例を挙げています。あなたの質問が何であるか分かりません。 –
@Raymond Chen、メッセージの順序についての詳細なコメントはありますか?注文には多くの論理があります。たとえば、ポスターがターゲットスレッド自体でない場合、オーダーは保持されますか。 – ZijingWu
スレッドを越えている場合、保証はさらに少なくなります。あなたの例のメッセージはどちらの順序でも受け取ることができます。唯一保証されるのは、メッセージキューに優先順位の高いメッセージがない場合、その優先順位の低いメッセージがディスパッチされることです。 – IInspectable