多執行緒訊息傳遞

2021-06-29 04:42:54 字數 992 閱讀 3566

mfc工作者執行緒向主線程傳遞訊息:

我們在編寫vc網路應用程式時,經常會用到2個執行緒,乙個是主線程,主線程負責與介面相關的工作;乙個是網路接收執行緒,負責接收網路上的資料,它在後台工作,接收執行緒經常需要與主線程進行互動,例如接收到的資料要顯示在視窗中等。由於工作者執行緒沒有訊息佇列和訊息迴圈,因此它不能接收和處理訊息,只能傳送訊息。

先定義乙個結構體用於引數傳輸

struct recvparam;

recvparam *precvparam = new recvparam;

precvparam->sock = m_sock;

precvparam->hwnd = m_hwnd;

建立接收執行緒

handle hthread=createthread(null,0,recvproc,(lpvoid)precvparam,0,null);

執行緒入口函式為全域性函式或靜態類成員函式

dword winapi recvproc(lpvoid lpparameter);                       //全域性函式

static dword winapi recvproc(lpvoid lpparameter);              //靜態類成員函式(宣告)

dword winapi cchatdlg::recvproc(lpvoid lpparameter)        //靜態類成員函式(實現)

} 視窗類標頭檔案中新增訊息定義

#define wm_recvdata      wn_user+1

宣告訊息響應函式

afx_msg void onrecvdata(wparam wparam,lparam lparam);

新增訊息對映

on_message(wm_recvdata,omrecvdata)

定義訊息響應函式

void cchatdlg::onrecvdata(wparam wparam, lparam lparam)

多執行緒 引數傳遞

4,unique ptr作為引數傳遞,必須使用move函式 5,函式的指標作為引數傳遞 引用傳遞,指標傳遞的注意事項 因為執行緒2裡使用的是執行緒1的變數a,所以如果執行緒1比執行緒2提前結束了,結束的同時就會釋放變數a的記憶體空間,可是這時執行緒2還沒結束,再去訪問執行緒1中的變數a的話,就會發生...

C 多執行緒引數傳遞

在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedthreadstart p...

C 多執行緒引數傳遞

c 多執行緒引數傳遞 在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedth...