AfxBeginThread的参数为什么不对呢????

BlueLakeihaveadream 2003-05-31 10:28:39
我在操练多线程编程时遇到下面的问题:
线程主函数:
UINT CTaskingDoc::ThreadFunc(LPVOID pParam)
{
CSpinner* lpSpin=(CSpinner*)pParam;
..........

..........

return 0;
}
在另一函数中启动线程:
..........
m_pSpinThread[nIndex]=AfxBeginThread(ThreadFunc, (LPVOID &)m_cSpin[iSpnr]);
..........
结果编译错误:
“error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
Error executing cl.exe.”

到底问题出在哪里???
望高手赐教,本人在此先谢过了!!

BLUELAKE
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤必有邻 2003-05-31
  • 打赏
  • 举报
回复
真正会造成混乱的情形是:把非static成员函数作为线程函数,因为在启动线程时,不能指明启动哪个对象的成员函数作为线程,基类?派生类?加上static,就限制了派生及重载,使得线程函数只有一个版本(定义成全局一样效果)。
当启动某线程函数的多个线程时,可以通过传入不同的参数,来实现相应的处理,(访问全局变量也可达到相同的目的--建议使用合适的启动参数)。
  • 打赏
  • 举报
回复
把ThreadFunc定义成static函数确实不再出现编译错误了,但是这样的线程主函数在被多个线程调用时会不会造成混乱呢??

谢谢!
tangmasi 2003-05-31
  • 打赏
  • 举报
回复
提示很明显嘛!
它说AfxBeginThread函数的两个重载版本都不能将你传递的第一个参数转化为它们所需的类型,所以才没法执行下去!
一般来说AfxBeginThread函数所需的第一个参数需要是全局类型的,可以把ThreadFunc定义成全局的就成了,第二个参数一般传递一个实际线程执行函数的this指针。
例子如下:

UINT ThreadProc(LPVOID pParam)
{
((CMyClass*)pParam)->ThreadFunc();
return 1;
}

CMyClass::ThreadFunc()
{
}

CMyClass::SomeFunc()
{

......
AfxBeginThread(ThreadProc, this);
............
}
}
Pipi0714 2003-05-31
  • 打赏
  • 举报
回复
你调用函数参数不对,比如说函数重载,你的第一参数与第二参数没有统一到一个函数中去,而是两个函数所以你参照一下msdn就会明白了,修改一下就可以了
Carapee 2003-05-31
  • 打赏
  • 举报
回复
把ThreadFunc定义成static函数就好了。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧