在基于MFC的对话框程序中创建一个线程如下:
DWORD WINAPI ThreadFunc( LPVOID lpParam ) 

int temp;
// TotalNum = temp;//这里不能调用类的变量
UpdateData(FALSE);//这里不能调用类此函数
    return 0; 
}
hThread = CreateThread( 
    NULL,                        // no security attributes 
    0,                           // use default stack size  
    ThreadFunc,                  // thread function 
    &dwThrdParam,                // argument to thread function 
    0,                           // use default creation flags 
    &dwThreadId);                // returns the thread identifier 但是创建完后发现线程函数不能调用对话框类的变量和成员函数,请问应该如何实现呢

解决方案 »

  1.   

    DWORD WINAPI ThreadFunc( LPVOID lpParam ) 

    CXXXDlg *pDlg=(CXXXDlg *)lpParam ;
    int temp; 
    pDlg->TotalNum = temp;
    pDlg->UpdateData(FALSE);
    return 0; 

      

  2.   

    线程函数如果在类里面,则必须是静态函数,否则你可以单独写成独立函数。
    关于该线程接收的参数,有两种途径:
    途径1:传递对话框对象的指针,即CXXXDlg *pDlg;
    途径2:传递对话框对象的句柄。当然了,如果你为了快速编写,或者不管代码的优劣,可以采用第一种办法,缺点是容易因为处理函数写的不好造成对象内容被胡乱修改。
    途径2则使用对象提供的消息之类的途径来处理,安全性较高,但比较繁琐。