C++类的线程函数为什么要加static修饰

首先看下面这个类

class CMyTest
{
public:
CMyTest();
~CMyTest();

DWORD   Start();
static DWORD WINAPI ThreadFun(LPVOID);

// ....

};

void main()
{
CMyTest test;
// .....
}

ThreadFun(LPVOID) 为什么要加static修饰呢!
原来非静态成员函数都会在参数列表中加上一个this指针为为参数, 这样的话你写的线程函数就不符合调用规定了.

比如 DWORD WINAPI ThreadFun(LPVOID); 是非静态的,实际编译后,就会变成
DWORD WINAPI ThreadFun(LPVOID, CMyClass *this);

这个函数就明显不能作为线程的函数了, 因为多了个参数.所以编译就过不了了.
加上static修饰后,类的成员函数就不会被加上默认的this参数,所以就符合调用规定了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容