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

来源:互联网 发布:linux 端口映射工具 编辑:程序博客网 时间:2024/04/27 23:46

首先,类成员函数是不能够直接被当做线程的成员函数使用

原因是,类中定义的成员函数,编译器会给其加上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; }


0 0
原创粉丝点击