我不太瞭解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