类成员函数作为线程函数

首先,普通类成员函数是不能够直接被当做线程的成员函数使用。因为类中定义的成员函数,编译器会给其加上this指针。

推荐一个论坛讨论过程:成员函数作为线程函数

静态成员函数:

    把成员函数声明成static类型,去掉this指针。但是静态成员函数只能够访问静态成员变量。因此这种方式有一定的局限性。

友元函数:

    把线程函数设置成类的友元函数,这样线性函数就能访问类中的成员。

例程:

#include "windows.h" 
#include 
 
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; 
}

 

你可能感兴趣的:(C/C++)