template<class _Ty>
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 <string>
#include <iostream>
#include <conio.h>
#include <process.h>
using namespace std;
class Hello
{
public:
Hello(const std::string& name):m_name(name){
}
~Hello(){
}
void run(){
cout << "Hello " << m_name << endl;
}
private:
std::string m_name;
};
template<class _Ty>
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;
}
本文介绍了一种使用C++实现线程调用类成员函数的方法,通过自定义模板函数mem_fun_thread_t来转换成员函数指针,使其能够作为线程启动函数。示例中展示了如何创建Hello类并在线程中调用其run成员方法。
4701

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



