天天看點

PostMessage與SendMessage差別

1、傳回值意義

的差別

,先看一下 MSDN 裡的聲明:

LRESULT SendMessage(

        HWND hWnd,

        UINT Msg,

        WPARAM wParam,

        LPARAM lParam

);

BOOL PostMessage(

        HWND hWnd,

        UINT Msg,

        WPARAM wParam,

        LPARAM lParam

);

  其

4 個參數的意義是一樣的,傳回值類型不同。

PostMessage的

傳回值(BOOL)表示PostMessage函數執行是否正确,SendMessage的傳回值(LRESULT )表示其他程式處理消息後的傳回值。

2、PostMessage 是異步的,SendMessage 是同步的。

  PostMessage 隻把消息放入隊列,不管消息是否被處理就傳回,消息可能不被處理;而 SendMessage 等待消息被處理完了之後才傳回,如果消息不被處理,發送消息的線程将一直被阻塞。

3、 當一個線程向該線程所建立的視窗SendMessage消息時,由 USER32.DLL 子產品調用目标視窗的消息處理程式,并将結果傳回,它隻是調用指定視窗的消息處理過程,并不将消息入隊列。當一個線程向另一個線程所建立的視窗 SendMessage時,該消息要追加到接收消息線程的發送消息隊列,然後發送消息的線程進入等待狀态,接收消息的線程處理完該消息後,由系統喚醒發送 消息的線程,這時發送線程繼續進行。PostMessage 發送消息時,消息要先放入線程的消息隊列,然後通過消息循環分派到目标視窗(DispatchMessage)。一個線程的消息隊列實際上分為四種不同的 消息隊列:Post消息隊列、

Send

消息隊列、輸入消息隊列、應答消息隊列。PostMessage是将消息追加到Post消息隊列,SendMessage是追加到

Send

消息隊列,兩個隊列處理的優先級并不一樣。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28699126/viewspace-757235/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/28699126/viewspace-757235/