使用訊息(message)是執行緒見通訊的常用方法之一。windows也提供了許多函式來實現這一點。主要使用的函式有postthreadmessage(), peekmessage(), getmessage()
發訊息:
執行緒需要接收訊息的話需要有個訊息佇列,預設是不具有訊息佇列的。在目標執行緒裡使用peekmessage(&msg,null, wm_user, wm_user, pm_noremove) 就可以建立執行緒訊息佇列
接收訊息:
訊息接收可以用peekmessage()和getmessage()兩個函式之一。兩個函式的區別是getmessage()不是立即返回,在接收到訊息之前一直等待。peekmessage()沒有訊息也會立即返回。這個差別從字面也很好理解,peek是瞅一眼的意思。
訊息內容
訊息內容可以通過postthreadmessage()後兩個引數wparam和lparam來傳遞。wparam是無符號的,lparam是有符號的,兩個引數都可以傳遞指標。
**範例:
傳送訊息:
msg msg;
bool status;
msg.hwnd = null;
msg.message = wm_user;
msg.wparam = (wparam) _mode;
if(!postthreadmessage(mmainthreadid, wm_user, (wparam) _para, null))
// end of -- if(!postthreadmessage(mmainthreadid, wm_user, (wparam) _para, null))
在mainthread裡接收:
unsigned int runmainthread (void)
// end of -- switch(msg.message)
} // end of -- while (peekmessage(&msg, null, 0, 0, pm_remove))
} // end of -- while (running)
return (0);
}
參考:
多執行緒間訊息通訊
自定義windows訊息 define my msg wm user 1 為了防止使用者自定義訊息id與系統訊息id衝突,使用者只能定義wm user 0x0400 以後的id使用 postthreadmessage 將乙個佇列訊息放入 寄送 到指定執行緒的訊息佇列裡,不等待執行緒處理訊息就返回 b...
windows下程序間通訊與執行緒間通訊
程序間通訊 只需簡單的指標操作就可讀取和修改檔案的內容。win32 api允許多個程序訪問同一檔案對映物件,各個程序在它自己的位址空間裡接收記憶體的指標通過使用這些指標,不同程序就可以讀或修改檔案的內容,實現對檔案中資料的共享。檔案對映是在多個程序間共享資料的非常有效方法,有較好的安全性。但檔案對映...
Windows執行緒通訊與訊息對映
在標頭檔案中加入乙個定義使用者訊息的語句 const wm threadended wm user 100 自定義執行緒訊息再在標頭檔案中加入訊息處理函式的宣告 afx msg afx msg long onthreadended wparam wparam,lparam lparam 宣告訊息處理...