关于VC中线程创建的问题.

EvenDevil 2010-02-19 03:21:58
我用的是Visual C++,本来在WinMain中直接调用CreateThread()(线程函数定义为DWORD WINAPI fuc(LPVOID))会成功.但是现在我写了一个类,类中将线程函数设为成员函数,并在另一个成员函数中调用CreateThread()创建,定义都是一样的,但是编译时出了问题,说无法将CreateThread()的第三个参数(就是线程数学)由unsigned long(void*)转化成unsigned long _stdcall*(void*)型。
哎,搞了半天没整好,还请大家指教。。。
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
luck_wei 2010-02-19
  • 打赏
  • 举报
回复
把类中要用的成员声明为静态就可以成功创建进程了,试试看。
dskit 2010-02-19
  • 打赏
  • 举报
回复
引用 3 楼 arong1234 的回复:
使用全局函数而不是类成员函数即可。如果你要用类的东西,把类对象的指针当作线程参数传进去即可,线程函数不是可以接收一个LPVOID的参数么
引用 2 楼 evendevil 的回复:是啊,我也看见有个thiscall,难道就没办法了吗


我是这样处理的。
Defonds 2010-02-19
  • 打赏
  • 举报
回复
引用楼主 evendevil 的回复:
我用的是Visual C++,本来在WinMain中直接调用CreateThread()(线程函数定义为DWORD WINAPI fuc(LPVOID))会成功.但是现在我写了一个类,类中将线程函数设为成员函数,并在另一个成员函数中调用CreateThread()创建,定义都是一样的,但是编译时出了问题,说无法将CreateThread()的第三个参数(就是线程数学)由unsigned long(void*)转化成unsigned long _stdcall*(void*)型。
哎,搞了半天没整好,还请大家指教。。。
用全局函数
arong1234 2010-02-19
  • 打赏
  • 举报
回复
使用全局函数而不是类成员函数即可。如果你要用类的东西,把类对象的指针当作线程参数传进去即可,线程函数不是可以接收一个LPVOID的参数么
引用 2 楼 evendevil 的回复:
是啊,我也看见有个thiscall,难道就没办法了吗
EvenDevil 2010-02-19
  • 打赏
  • 举报
回复
是啊,我也看见有个thiscall,难道就没办法了吗
arong1234 2010-02-19
  • 打赏
  • 举报
回复
成员函数不能作为线程函数。成员函数有一个隐藏的this指针,因此他的参数列表比你看到的要多一个
而且,thiscall和线程函数的stdcall也不一样

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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