永发信息网

WINAPI里的CreateThread函数

答案:2  悬赏:70  手机版
解决时间 2021-04-04 17:50
  • 提问者网友:不爱我么
  • 2021-04-04 07:58
某个类里,public部分有该语句
ThreadHandle = CreateThread(NULL, 0, Run, NULL, 0, &ThreadID);
其中ThreadID为DWORD,
Run是该类private里的一个函数,定义如下:
DWORD WINAPI Run(LPVOID LpParameter)

编译的时候错误,说是实参与形参不兼容。请问C++里线程的Run部分不能像其他语言那样放在类中么?

环境Visual Studio 2010, .NET 4
没用C++写过多线程,感觉不好用。用的是windows.h里的WINAPI
最佳答案
  • 五星知识达人网友:平生事
  • 2021-04-04 09:14
传给CreateThread的函数,必须是全局函数或静态函数,不能使用类的普通函数
即,你可以使用如下函数声明:
static DWORD WINAPI Run(LPVOID LpParameter);
因为类的普通函数会传递类对象指针作为隐含参数,所以与CreateThread所要求的函数类型不匹配
全部回答
  • 1楼网友:封刀令
  • 2021-04-04 10:03
把这个函数声明为static 就可以了,主要是CreateThread()是在整个进程生存的,Run 声明为类的成员函数,类死了,这个函数就死了,他的生存范围小于了CreateThread(); 所以,RUN可以为全局函数,或者是声明为类的静态函数,就可以解决问题。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯