在启动一个线程之前,必须为线程编写一个全局的线程函数,这个线程函数接受一个
32
位的
LPVOID
作为参数,返回一个
UINT
。
一般来说,
C++
的类成员函数不能作为线程函数。这是因为在类中定义的成员函数,编译器会给其加上
this
指针。
如果一定要以类成员函数作为线程函数,通常有如下解决方案:
1
)将该成员函数声明为
static
类型,去掉
this
指针;
将成员函数声明为静态虽然可以解决作为线程函数的问题,但是它带来了新的问题,那就是
static
成员函数只能访问
static
成员。解决此问题的一种途径是可以在调用类静态成员函数(线程函数)时将
this
指针作为参数传入,并在该线程函数中用强制类型转换将
this
转换成指向该类的指针,通过该指针访问非静态成员。
(
2
)不定义类成员函数为线程函数,而将线程函数定义为类的友元函数。这样,线程函数也可以有类成员函数同等的权限;
(
3
)可以对非静态成员函数实现回调,并访问非静态成员。
详细内容参照:
深入浅出Win32多线程程序设计之线程控制