我不太了解GetWindowText
如何在与调用方相同的线程上工作。如果GetWindowText
阻塞,直到消息被处理,线程怎么能调用DispatchMessage
?它在GetWindowText
内被封锁。这是否意味着GetWindowText
必须始终从操作消息循环的单独线程调用?同步使用GetWindowText
1
A
回答
7
GetWindowText
只是SendMessage(WM_GETTEXT)
的薄包装。
发送到窗口的消息总是在创建窗口的线程中处理(窗口具有“线程关联”)。发送的消息不通过DispatchMessage
,而是GetMessage
(或PeekMessage
或MsgWaitForMultipleObjects
)将直接调用窗口过程,以处理从另一个线程发送的消息。如果消息来自同一个线程,SendMessage
将调用窗口过程。
的
SendMessage
函数调用指定的窗口的窗口过程,并不会返回,直到窗口过程已经处理了该消息。
而且the GetMessage
documentation says:
检索从调用线程的消息队列中的消息。该功能调度传入的已发送消息,直到发布的消息可用于检索。
急件入方向带发送的消息,检查一个发布消息的线程的消息队列,和检索消息(如果有的话)。
发送消息的行为之前已突出了Raymond Chen's excellent blog, The Old New Thing,所有的Win32开发者应该订阅:
如果您使用上述任何发送型功能发送消息发送到属于发送线程的窗口,则该呼叫将同步进行。
回想
SendMessage
直接将消息传送到窗口过程;消息泵永远不会看到它。
当然,还有相关这里找到在计算器上的问题:
相关问题
- 1. C#如何使用WM_GETTEXT/GetWindowText函数API
- 2. SetWindowsHookEx HCBT_CREATEWND GetWindowText
- 3. 同步使用异步值
- 4. 使异步调用同步
- 5. 使Json调用同步同步
- 6. 同步使用MS同步框架
- 7. 使用同步块的同步队列
- 8. 同步使用getScript
- 9. Hystrix同步使用
- 10. 同步使用LocalMessageSender
- 11. GetWindowText没有任何返回
- 12. MFC中的CEdit和GetwindowText
- 13. win32 C++中GetWindowText()不工作
- 14. 如何使异步调用同步
- 15. 异步使用的HttpListener同步行为
- 16. 使用RxJS同步异步操作
- 17. 设计使用同时支持同步和异步调用
- 18. 使异步查询同步
- 19. 使NSOperation同步
- 20. 使用jQuery同步'radiogroups'
- 21. 如何使用PHPMyAdmin同步?
- 22. 使用svnkit进行同步
- 23. 使用同步而登录
- 24. Dropbox同步使用PhoneGap
- 25. 同步的Flickr使用Django
- 26. 使用GameKit同步问题
- 27. 使FB.api()调用同步
- 28. 使用javascript同步数组
- 29. 使用WINAPI同步线程
- 30. 使用Unison自动同步
我看到了它的工作通过发送一个 信息。我没有看到它没有像大多数消息那样排队消息。 – Puppy 2012-02-19 04:26:16
@DeadMG:你肯定有足够的权利来解决一些基本的RTFM问题,我只是很惊讶,你不知道在哪里寻找这个问题。 – 2012-02-19 04:30:56