Win32多線程 線程函數必須爲靜態的解決方案

Win32多線程 線程函數必須爲靜態的解決方案

public:
CProgressCtrl m_ctrlProgress;

//線程調用函數
static DWORD WINAPI ThreadFuncRead(LPVOID pcdlg);
static DWORD WINAPI ThreadFuncWrite(LPVOID pcdlg);

在頭文件中線程函數的定義必須爲靜態的,但是這樣就會出現一個問題,如何調用非靜態的變量與函數?

解決方案:在創建線程的時候傳入this指針
hThrd1=CreateThread(NULL,0,ThreadFuncRead,this,0,&threadId); //創建一個線程 傳入this指針 指向當前這個對象

然後在線程函數中對傳入的this指針強轉類型,即可使用非靜態成員和函數。
DWORD CFileDlg::ThreadFuncRead(LPVOID pcdlg)
{
CFileDlg the=(CFileDlg)pcdlg;
}

在靜態函數中是沒有默認的this指針的,this指針只存在於普通成員函數中。如果沒有顯示的傳入,靜態函數是沒有直接使用this指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章