非静态的类成员函数是不能直接作为线程函数的,如果把成员函数声明为静态,可以解决问题,但是静态函数只能访问类
的静态成员,这又带来很多麻烦。
不过可以通过包装解决此问题,如下:
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进行多线程编程时应该经常用到。
本文介绍了一种将非静态成员函数用于多线程编程的方法,通过包装成员函数来实现线程安全调用,适用于MFC等环境下多线程应用开发。
1757

被折叠的 条评论
为什么被折叠?



