sendmessage和postmessage的区别
生活随笔
收集整理的這篇文章主要介紹了
sendmessage和postmessage的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、POSTMESSAGE(非阻塞)與SENDMESSAGE(阻塞) 區別1:返回時間不同 PostMessage發送消息后就立即返回
SendMessage發送消息后,等待消息處理函數處理完后才返回。
區別2:返回值不同
從函數定義上來看,PostMessage的返回值是BOOL, 意思是返回非0值,消息執行成功,返回0,執行不成功。SendMessage的返回值是LRESULT,返回的是消息處理函數后的返回值。
區別3:同步和異步問題 如果發送的消息碼在WM_USER之下(非自定義消息)且消息參數中帶有指針,那么 PostMessage,SendNotifyMessage,SendMessageCallback這些異步消息發送 函數將會失敗。原因是異步消息發送函數發送后會立即返回,這樣會導致消息處理函數還未處理消息,消息參數中的指針就被釋放了。
區別4:發送中的過程不同 在同一個線程中,PostMessage發送消息時,消息要先放入系統消息隊列中, 系統會根據存放的消息,找到對應的線程(窗口、程序)的消息隊列中,然后由 GetMessage/PeekMessage提交給TranslateMessage,如果是鍵盤、鼠標消息, TranslateMessage會處理提交給DispatchMessage,如不是,則直接提交給 DispatchMessage,最后DispatchMessage經USER模塊協助,將消息傳遞給窗口 處理函數;而SendMessage發送消息時,由USER模塊調用目標窗口的處理函數 處理消息,并將結果返回。 不在同一個線程,基本都是用PostThreadMessage代替PostMessage,因為 PostThreadMessage是直接指定線程ID來確定目標線程;而SendMessage發送 消息到目標窗口所屬的線程的消息隊列中,然后發送消息的線程在UESR模塊內 監視和等待消息處理,直到目標窗口處理完返回。總結
以上是生活随笔為你收集整理的sendmessage和postmessage的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西工大文化学校地址(西工大文化补学学校官
- 下一篇: C# 调Win32 API SendMe