在基于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 但是创建完后发现线程函数不能调用对话框类的变量和成员函数,请问应该如何实现呢
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 但是创建完后发现线程函数不能调用对话框类的变量和成员函数,请问应该如何实现呢
{
CXXXDlg *pDlg=(CXXXDlg *)lpParam ;
int temp;
pDlg->TotalNum = temp;
pDlg->UpdateData(FALSE);
return 0;
}
关于该线程接收的参数,有两种途径:
途径1:传递对话框对象的指针,即CXXXDlg *pDlg;
途径2:传递对话框对象的句柄。当然了,如果你为了快速编写,或者不管代码的优劣,可以采用第一种办法,缺点是容易因为处理函数写的不好造成对象内容被胡乱修改。
途径2则使用对象提供的消息之类的途径来处理,安全性较高,但比较繁琐。