GetWindowText
が呼び出し元と同じスレッド上のウィンドウでどのように動作するのかよくわかりません。メッセージが処理されるまでGetWindowText
がブロックされる場合、スレッドはどのようにしてDispatchMessage
を呼び出しますか?それはGetWindowText
の内部でブロックされています。つまり、GetWindowText
は、メッセージループを操作するスレッドとは別のスレッドから常に呼び出さなければなりませんか?GetWindowTextを同期的に使用する
答えて
GetWindowText
は、SendMessage(WM_GETTEXT)
の単なる薄いラッパーです。
ウィンドウに送信されたメッセージは、ウィンドウを作成したスレッドで常に処理されます(ウィンドウには「スレッドアフィニティ」があります)。送信メッセージがDispatchMessage
を経由せず、むしろGetMessage
(またはPeekMessage
またはMsgWaitForMultipleObjects
)は、別のスレッドから送信されたメッセージに対して直接ウィンドウプロシージャを呼び出します。メッセージが同じスレッドから送信された場合は、SendMessage
がウィンドウプロシージャを呼び出します。
SendMessage
関数は、指定されたウィンドウのウィンドウプロシージャを呼び出し、ウィンドウプロシージャがメッセージを処理するまで戻りません。
そしてthe GetMessage
documentation says:
は、呼び出し元のスレッドのメッセージキューからメッセージを取得します。この関数は、ポストされたメッセージが取得可能になるまで、受信した送信メッセージをディスパッチします。 the
PeekMessage
docsから
着信
ディスパッチは、メッセージを送信し、投稿メッセージのスレッドメッセージキューをチェックし、(存在する場合)メッセージを検索します。あなたが送信する上記送信型関数のいずれかを使用している場合
:メッセージを送信する動作は、以前にそのすべてのWin32開発者が購読するべきで、Raymond Chen's excellent blog, The Old New Thing上で強調表示された
メッセージを送信スレッドに属するウィンドウに送信すると、呼び出しは同期して行われます。
SendMessage
がウィンドウプロシージャに直接メッセージを配信することを思い出してください。メッセージポンプはそれを決して見ません。
そしてもちろん、StackOverflowの上ここで見つける関連の質問があります。
- 1. 非同期に使用されるHttpListenerが同期的に動作する
- 2. PHPは非同期的にソケットを使用できますか?
- 3. 同期サービスによるOCAの動的テーブル名の使用
- 4. JMSで同期メッセージと非同期メッセージを使用するタイミング
- 5. 非同期ツイスト通話を使用する同期クライアントのリファクタリング
- 6. ドメインモデルを非同期的にロードする
- 7. ビューを同期的に描画する
- 8. 非同期のCocoaクラスを同期的に動作させる
- 9. LocalMessageSenderを同期使用する
- 10. クロージャを使用して同期javascriptを強制的に実行する
- 11. jQuery(MVC)を使用してファイルシステムのテキストファイルを非同期的にストリーミングする
- 12. プロデューサ - コンシューマ同期を使用
- 13. SetWindowsHookEx HCBT_CREATEWND GetWindowText
- 14. 誰かがGuavaのCacheLoaderを非同期的に使用する方法
- 15. コールバックを使用する「古典的」非同期メソッドを変換/ラップする
- 16. Meteor.methodsを同期非同期にする
- 17. GetWindowTextを使用してバッファ内に間違ったシンボルが表示される
- 18. MFCのCEditとGetwindowText
- 19. C#非同期操作を強制的に同期させる方法
- 20. 画像を非同期的にブラックベリー
- 21. アンドロイドのオーディオストリーミングに非同期タスクを使用する方法
- 22. クライアント/サーバーの非同期通信にGZipStreamを使用する
- 23. F#で非同期ワークフローでreraiseを使用するには?
- 24. 新しいasync/awaitと非同期にLinqを使用する
- 25. Node.js - 非同期のlib-async.foreachをオブジェクトと共に使用する
- 26. "WinHttp.WinHttpRequest.5.1"を非同期で使用するには?
- 27. 非同期待機ボタンは常に同期的に実行されます。
- 28. AVPlayer setRateを使用した同期:time:atHostTime:
- 29. カーソルアダプタを使用した非同期リストビュー
- 30. NSURLConnectionを使用した非同期ダウンロードキュー
は、私はそれが送ることによって、働いていたことがわかりましたaメッセージ。私はそれがほとんどのメッセージのようにメッセージをキューに入れなかったことを読まなかった。 – Puppy
@DeadMG:基本的なRTFMの質問には十分な貢献をしていると確信していますが、私はちょうどこの場所を探す場所が分からないことに驚いています。 –