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...