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. 非同期の値を同期的に使用する
- 2. 非同期に使用されるHttpListenerが同期的に動作する
- 3. Node.jsで同期的にリクエストを使用するには?
- 4. ノードexecを同期的に使用する方法は?
- 5. ユニゾンを使用して自動的に同期する
- 6. JavaScript:同期コードで非同期FileReaderを使用するには?
- 7. GetWindowText malfunktion
- 8. javascriptを使用する非同期に
- 9. PHPは非同期的にソケットを使用できますか?
- 10. FFImageLoadingを同期的に使用していますか?
- 11. c# - 周期的トリガーを使用した非同期バックグラウンドタスク
- 12. 同期サービスによるOCAの動的テーブル名の使用
- 13. 非同期ツイスト通話を使用する同期クライアントのリファクタリング
- 14. JMSで同期メッセージと非同期メッセージを使用するタイミング
- 15. SetWindowsHookEx HCBT_CREATEWND GetWindowText
- 16. ビューを同期的に描画する
- 17. ドメインモデルを非同期的にロードする
- 18. 非同期のCocoaクラスを同期的に動作させる
- 19. クロージャを使用して同期javascriptを強制的に実行する
- 20. jQuery(MVC)を使用してファイルシステムのテキストファイルを非同期的にストリーミングする
- 21. UICollectionViewを非同期的に使用してUITableViewCellをコンフィグレーションする方法
- 22. LocalMessageSenderを同期使用する
- 23. booleanを使用して同期する
- 24. リクエストで非同期を使用する
- 25. 非同期パッケージを使用して同期的にmongooseクエリを実行します。
- 26. ボタンを使ってiCloudと強制的に同期する
- 27. 誰かがGuavaのCacheLoaderを非同期的に使用する方法
- 28. 反応/還元でFileReaderを「同期的に」使用する方法
- 29. プロデューサ - コンシューマ同期を使用
- 30. MFCのCEditとGetwindowText
は、私はそれが送ることによって、働いていたことがわかりましたaメッセージ。私はそれがほとんどのメッセージのようにメッセージをキューに入れなかったことを読まなかった。 – Puppy
@DeadMG:基本的なRTFMの質問には十分な貢献をしていると確信していますが、私はちょうどこの場所を探す場所が分からないことに驚いています。 –