读书人

beginthreadex函数的有关问题

发布时间: 2012-03-01 10:25:47 作者: rapoo

beginthreadex函数的问题
tdlg.cpp


WORD w;

UINT i;

w=_beginthreadex(NULL,0,MyProc2,this,0,&i);



UINT WINAPI CTDlg::MyProc2(LPVOID l)
{
AfxMessageBox开启线程2 ");
return 1;
}
编译时提示cannot convert parameter 3 from 'unsigned int (void *) ' to 'unsigned int (__stdcall *)(void *) '

如果MyProc2做为全局函数则可以通过

[解决办法]
类的成员函数不能作线程函数,只有全局函数或是静态成员变量可以,因为成员函数如你上面那个UINT WINAPI CTDlg::MyProc2(LPVOID l),看起来它只有一个参数,但是实际上它还有一个指针参数this ,用来指明这个函数是属于具体哪一个对象的函数,所以有两个参数,所以不行,上面的出错信息也说出了这个问题。
[解决办法]
UINT WINAPI static CTDlg::MyProc2(LPVOID l)
这样也能过。 线程函数不能为非静态的类的成员函数。

读书人网 >VC/MFC

热点推荐