首頁  >  文章  >  線程間通訊方式有哪幾種?

線程間通訊方式有哪幾種?

不言
不言原創
2019-04-08 13:59:1151638瀏覽

線程間通訊方式有哪幾種?

執行緒之間的通訊方式有以下幾種:

1、訊息佇列,是最常用的一種,也是最靈活的一種,透過自訂資料結構,可以傳輸複雜和簡單的資料結構。

在Windows程式設計中,每個執行緒都可以擁有自己的訊息佇列(UI執行緒預設自帶訊息佇列和訊息循環,工作執行緒需要手動實作訊息循環),因此可以採用訊息進行執行緒間通信sendMessage,postMessage。

定義訊息#define WM_THREAD_SENDMSG=WM_USER 20; 

新增訊息函數宣告afx_msg int OnTSendmsg(); 

新增訊息映射ON_MESSAGE(WM_THREAD_SENDMSG,On#TS)

新增訊息對應##新增OnTSM()的實作函數; 

在執行緒函數中加入PostMessage訊息Post函數

2、使用全域變數 


##程式中的執行緒間記憶體共享,這是比較常用的通訊方式和互動方式。

附註:定義全域變數時最好使用volatile來定義,以防編譯器對此變數進行最佳化。

3、使用事件CEvent類別實作執行緒間通訊 

Event物件有兩種狀態:有訊號和無訊號,執行緒可以監視處於有訊號狀態的事件,以便在適當的時候執行對事件的操作。

1)建立一個CEvent類別的物件:CEvent threadStart;它預設處在未通訊狀態; 

2)threadStart.SetEvent();使其處於通訊狀態; 

3)呼叫WaitForSingleObject()來監視CEvent物件

以上是線程間通訊方式有哪幾種?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn