當前位置:名人名言大全網 - 祝福短信 - 線程之間的通信方式有哪些?

線程之間的通信方式有哪些?

多線程通信有三種主要方法:

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的觸發狀態可以實現線程間的通信和同步。