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参数,所以就符合调用规定了。

你可能感兴趣的:(C++类的线程函数为什么要加static修饰)