首先,普通类成员函数是不能够直接被当做线程的成员函数使用。因为类中定义的成员函数,编译器会给其加上this指针。
推荐一个论坛讨论过程:成员函数作为线程函数
静态成员函数:
把成员函数声明成static类型,去掉this指针。但是静态成员函数只能够访问静态成员变量。因此这种方式有一定的局限性。
友元函数:
把线程函数设置成类的友元函数,这样线性函数就能访问类中的成员。
例程:
#include "windows.h"
#include <process.h>
class ExampleTask
{
public:
friend void taskmain(LPVOID param);
void StartTask();
int value;
};
void taskmain(LPVOID param)
{
ExampleTask * pTaskMain = (ExampleTask *) param;
//通过pTaskMain指针引用
}
void ExampleTask::StartTask()
{
_beginthread(taskmain,0,this);
}
int main(int argc, char* argv[])
{
ExampleTask realTimeTask;
realTimeTask.StartTask();
return 0;
}