1.全局變量
進程中線程之間的內存是共享的,這是壹種常見的通信和交互方式。
註意:定義全局變量時最好使用volatile,以防編譯器優化這個變量。
2.消息消息機制
消息通信有兩個常見的接口:PostMessage和PostThreadMessage。
PostMessage向線程的主窗口發送壹條消息。PostThreadMessage是任意兩個線程之間的通信接口。
2.1.PostMessage()
功能原型:
B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM LPARAM);
參數:
窗口程序接收消息的窗口的句柄。可以取兩個具有特定含義的值:
HWND。廣播:消息發送到系統的所有頂層窗口,包括不屬於自己的無效或不可見的窗口和被覆蓋的窗口。
和彈出窗口。消息不會發送到子窗口。
NULL:該函數的操作與調用PostThreadMessage函數相同,將參數dwThread設置為當前線程的標識符。
Msg:指定要發送的消息。
WParam:指定特定於消息的附加信息。
IParam:指定特定於消息的附加信息。
返回值:如果函數調用成功,返回非零值;如果函數調用失敗,返回值為零。
MS還提供了用於消息間通信的SendMessage方法SendMessage(),它不同於PostMessage:
SendMessage是同步的,而PostMessage是異步的。SendMessage在返回之前必須等待發送的消息被執行。
2.2.PostThreadMessage()
PostThreadMessage方法可以向指定的線程發送消息。
函數原型:Bool post Thread message(dword ID Thread,uintmsg,wparam wparam,lparam lparam);
參數除了ThreadId基本和PostMessage壹樣。
目標線程通過GetMessage()方法接受消息。
註意:使用這個方法時,目標線程必須已經有了自己的消息隊列。否則,將返回ERROR_INVALID_THREAD_ID錯誤。可以使用
PeekMessage()為線程創建壹個消息隊列。
3.CEvent對象
CEvent是MFC中的壹個對象,通過改變CEvent的觸發狀態可以實現線程間的通信和同步。