创建线程时,需要指定线程的入口函数。一般来讲,线程函数为全局函数或静态函数。类的成员函数默认含有this指针作为参数,与线程函数指针类型不匹配,不能将类的成员函数指定为线程函数。如何在线程中执行类的成员函数或者访问数据成员呢?
最常用的方法就是线程函数还是用全局或静态函数,然后把类对象指针或this作为线程函数参数传入,在线程函数中将void类型参数强转为对应类型,再去操作。
再一种做法就是将类的静态成员函数作为线程入口函数,这样在线程中就只能访问类的静态成员了。
或者就在类内定义友元函数,把该友元函数作为线程函数。这样破坏封装性。
虽然无参的成员函数刚好和线程入口函数类型匹配,但C++不支持将成员函数指针强制转换成其它类型的指针,成员函数ReturnType Class::MemFun();直接强制类型转换FNTHREAD fun= (FNTHREAD)&Class::MemFun; 这样写法将引起编译错误。但尝试发现可以把成员函数指针传给可变参数的函数。这样做就太繁琐了。