您的位置:首页 > 其它

类成员函数作为线程函数的几种方法

2015-10-05 22:19 309 查看
首先,类成员函数是不能够直接被当做线程的成员函数使用。

原因是,类中定义的成员函数,编译器会给其加上this指针。

解决方案有如下:

1.把成员函数声明成static类型,去掉this指针。但是这种方法有缺陷,以为在类中,静态成员函数只能够访问静态成员变量。因此不推荐这种方式。

2.把线程函数设置成类的友元函数,这样线性函数同样可以访问类中的成员变量,这种方式比较常用。

例如:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: