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指針。