執行緒之間的通訊方式有以下幾種:
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中文網其他相關文章!