描述:
我定义了一个创建线程的函数:
int CrtThread()
{
hComWatchThread=CreateThread((LPSECURITY_ATTRIBUTES) NULL,//安全属性
0,//初始化线程栈的大小,缺省为与主线程大小相同
CommProc, //线程的全局函数
0, //此处传入了主框架的句柄
0,
&pThread );
if(hComWatchThread!=NULL)
{
SuspendThread(hComWatchThread);//成功创建则挂起
return 0;
}
else
{
return 1;
}
}
又定义了全局函数DWORD WINAPI CommProc( LPVOID pParam );
现在我希望能够将这两个函数都定义为一个类CbDrv的成员函数,便将此两个函数的生命都加入了类的定义中(.h文件)
int CrtThread();
DWORD WINAPI CommProc( LPVOID pParam );
然后在类的成员函数实现文件(.CPP)文件中实现了这两个函数
int CbDrv::CrtThread();
DWORD WINAPI CbDrv::CommProc( LPVOID pParam );
之后在编译时出错,在以下函数的 (CommProc, //线程的全局函数)处报错
hComWatchThread=CreateThread((LPSECURITY_ATTRIBUTES) NULL,//安全属性
0,//初始化线程栈的大小,缺省为与主线程大小相同
CommProc, //线程的全局函数
0, //此处传入了主框架的句柄
0,
&pThread );
报错的内容为'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
难道线程的全局函数不能是一个类的成员函数吗,请教各位了?
解决方案1:
static
解决方案2: 这样子写啊
class DDN
{
public:
bool sen(char a);
static void callback(LPVOID param);
void mcallback(...);
}
//静态函数
void DDN::callback(LPVOID param);
{
DDN* pDDN=(DDN*)param;
return pDDN->mcallback(...);
}
//成员函数
void DDN::mcallback(...)
{
...
//这里可以访问成员变量。
}
这篇文章对你可能有些帮助
http://www.flounder.com/callbacks.htm
static