相同點都是對其他線程或本線程發送送消息
不同點:
(1)SendMessage是線程阻塞的,要等到其他線程(特指窗口)響應完消息,并返回值,才能繼續執行.PostMessage不阻塞.
(2)SendMessage的返回值是其他線程處理后返回的值,PostMessage的返回值是true或false,表示函數是否正常執行.
(3)SendMessage執行時會造成線程切換,直到下一個CPU時間到來時,才能檢測返回值并向下執行.所為了提高系統執行效率,可以在另外一個線程中應該立即返回:
if(InSendMessage)
? ? RelpyMessage(value);
PostMessage不阻塞當前線程,立刻返回,繼續執行.
(4)SendMessage
如果目標窗口是當前線程創建的,則消息不進窗口的消息隊列。否則進入窗口的SendMessage消息隊列。
PostMessage會進入窗口的PostMessage消息隊列。
所以PostMessage的消息會有相對的延遲.具體使用哪個函數,看使用是否關心這種延遲.
每個窗口都有4個消息隊列,分別為:
<1>.? ? ? ?Send Message Queue發送消息隊列
<2>.? ? ? ?Posted Message Queue登記消息隊列
<3>.? ? ? ?Visualized Input Queue輸入消息隊列
<4>.? ? ? ?Reply Message Queue 響應消息隊列
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。