AfxBeginThread的用法
AfxBeginThread函数之一为
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam,...);
其中pfnThreadProc必须为全局函数和类的静态成员函数吗,我看到好多帖子说要这样,
类的非静态成员函数不可以吗,我自己写的是类的非静态成员,但是有错误,
报错:error C2440: “类型转换”: 无法从“UINT (__cdecl CMultiThreadMotion::* )(LPVOID)”转换为“AFX_THREADPROC”请问应该怎么做?
[解决办法]
AFX_THREADPROC FuncProc(LPVOID pParam)
{
CyourClass * pClass = (CyourClass *)pParam;//上面多了一个-,手误
pClass->YourClassMemFunc();
}
AfxBeginThread(FuncProc,this);//this就是你的类指针
[解决办法]
如果是类的成员函数那么就属于这个类的对象。
而不是这个类。不可以直接调用。必须先有对象。成员函数的指针类型不同于静态类成员函数。
不可以直接调用,因为线程函数的定义是一个规范格式调用。线程资源单独分配、
[解决办法]
因为每个类的非静态成员函数编译后,在参数表前都要加一个const youclass* 的参数,此参数就是this
例如
class A{
public:
void test(int a){}
}
--->
编译后就是
void test(const A* this,int a);
所以与线程函数的要求不符