首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

AfxBeginThread的用法解决方案

2013-12-28 
AfxBeginThread的用法AfxBeginThread函数之一为CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadPro

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);
所以与线程函数的要求不符

热点排行