通過傳送訊息來實現執行緒間通訊
2023年11
月12日星期三
執行緒間通常需要通訊,可以通過傳送訊息來實現執行緒間的通訊。但通常將繼承執行緒類
cwinthread
(在mfc
中),需要注意兩點:一是,執行緒函式的訊息對映巨集(
on_thread_message
);二是,給執行緒發訊息的函式(
postthreadmessage
)。詳細的**實現如下:
執行緒類:
begin_message_map(ccaculatethread, cwinthread)
on_thread_message(wm_caculate,oncaculate)
// 繼承cwinthread類的訊息對映
end_message_map()
// ccaculatethread
訊息處理程式
void
ccaculatethread::oncaculate(wparam wparam, lparam lparam)
sleep(500);
// 將計算結果發給主線程
::postmessage(getmainwnd()->getsafehwnd(),wm_display,nsum,null); }
主視窗實現:
void
ccommunicate_multithreaddlg::onbnclickedbutton1()
void
ccommunicate_multithreaddlg::onbnclickedradio3()
void
ccommunicate_multithreaddlg::onbnclickedradio1()
void
ccommunicate_multithreaddlg::onbnclickedradio2()
lresult ccommunicate_multithreaddlg::ondisplay(wparam wparam, lparam lparam)
通過訊息佇列實現兩程序間通訊
環境 linux c 功能 通過訊息佇列實現兩程序間通訊 clienta include include include include include include include include 定義訊息型別 typedef struct msg define len sizeof msg s...
Windows 執行緒間訊息通訊
使用訊息 message 是執行緒見通訊的常用方法之一。windows也提供了許多函式來實現這一點。主要使用的函式有postthreadmessage peekmessage getmessage 發訊息 執行緒需要接收訊息的話需要有個訊息佇列,預設是不具有訊息佇列的。在目標執行緒裡使用peekme...
多執行緒間訊息通訊
自定義windows訊息 define my msg wm user 1 為了防止使用者自定義訊息id與系統訊息id衝突,使用者只能定義wm user 0x0400 以後的id使用 postthreadmessage 將乙個佇列訊息放入 寄送 到指定執行緒的訊息佇列裡,不等待執行緒處理訊息就返回 b...