在熟悉多线程编程过程中,在做demo是需要在创建多线程时将类成员函数作为参数,以下是方法,总结如下:
创建多线程时直接用类成员函数的函数指针作为参数是不可以的,只能是static静态成员函数才可以,因此需要多写一个static成员函数,将类的指针作为参数传进来用来封装一下。
类的成员函数声明如下:
class thread_t
{
public:
~thread_t(){}
thread_t(){}
public:
int actualrun(); //真实的函数
static int runswitch(LPVOID p_); //线程函数
};
类的具体实现如下:
int thread_t :: acturalrun()
{
//do something
}
int thread_t::runswitch(LPVOID p_)
{
thread_t *plocal = (thread_t*)p_;
plocal->actualrun();
}
在主函数中创建多线程时:
void main()
{
HANDLE handle;
thread_t t;
handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_t::runswitch, &t, 0, NULL); //将类名通过地址参数传递给线程函数
//do other things
CloseHandle(handle);
}