用非静态类成员函数作为线程函数

来源:互联网 发布:windows 发送 消息 编辑:程序博客网 时间:2024/05/01 14:02

非静态的类成员函数是不能直接作为线程函数的,如果把成员函数声明为静态,可以解决问题,但是静态函数只能访问类

的静态成员,这又带来很多麻烦。

不过可以通过包装解决此问题,如下:

class test

{

    private:

          void func();//实际需要作为线程函数的函数

    public:

          static unsinged int _stdcall funcTread(PVOIN pvParam)  // 创建线程是传入的函数

          {

               (test*) ptest = (test*)pvParam;

               ptest-->func();

}

创建线程:

unsigned int  dwThreadID;

HANDLE hTreadServer =(HANDLE) _beginthreadex(NULL,0,test::funcTread,(PVOID)this,0,&dwThreadID);

再利用MFC进行多线程编程时应该经常用到。