在C++中,原生的线程API只能使用全局函数或类中的静态成员函数。那么,能不能使用类中的非成员函数呢?
答案是肯定的,但我们需要一个辅助函数来包装它。
首先,我们需要定义一个模板函数:template
void (*mem_fun_thread_t(void (_Ty::* mem_fun)()))(void*){
union{
void (*_start_address)(void*);
void (_Ty::* _mem_fun)();
}thread_func;
thread_func._mem_fun = mem_fun;
return thread_func._start_address;
}
该函数的用途就是将类中的非成员函数封装成一个普通的函数。
例子:#include "stdafx.h"
#include
#include
#include
#include
using namespace std;
class Hello
{
public:
Hello(const std::string& name):m_name(name){
}
~Hello(){
}
void run(){
cout <
}
private:
std::string m_name;
};
template
void (*mem_fun_thread_t(void (_Ty::* mem_fun)()))(void*){
union{
void (*_start_address)(void*);
void (_Ty::* _mem_fun)();
}thread_func;
thread_func._mem_fun = mem_fun;
return thread_func._start_address;
}
int _tmain(int argc, _TCHAR* argv[])
{
Hello hello("world");
_beginthread(mem_fun_thread_t(&Hello::run), 0, &hello);
_getch();
return 0;
}