C++中线程函数中方访问成员变量的问题

来源:互联网 发布:风油精 知乎 肛门 编辑:程序博客网 时间:2024/06/07 01:25
1.C++  Java 和C 三种语言中static的差别:
C++中的static和Java中基本类似 但是C语言不同:
在C语言中,关键字static有三个明显的作用:
1在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
2.C++中线程函数中方访问成员变量的问题
 
C++中线程函数可以使用2中方法定义:  
  1)全局函数。如   UINT   MyThread(LPVOID   p)  
  2)类的静态成员函数。如   static   UINT   MyView::MyThread(LPVOID   p)
 
线程函数中方访问成员变量的问题 实现方式有不少
基本原理都是把静态函数做成一个适配器(adapter) 调用另外一个函数
如下面的代码:
class   A  
  {  
  public:  
        A();  
        static   UINT   ThreadProc(LPVOID   pParam);  
   
  protected:  
        UNIT   Run();   //线程的真正实现类
  }  
   
  UINT   A::ThreadProc(LPVOID   pParam)   //静态函数做成一个适配器 
  {  
        A   *pObj   =   (A*)pParam;  
        return   pObj->Run();  
  }  
   
  UNIT   Run()     
  {  
        while   (1)  
        {  
              //.......
        }  
        return   0;  
  }  
   
  创建线程时:  
  CWinThread   *pThread   =   AfxBeginThread(ThreadProc,   this); 
 
原创粉丝点击