且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C++中类成员函数作为多线程的入口

更新时间:2021-10-28 10:47:01

搜了一圈答案,基本上都是启动线程的时候传入this指针,在线程函数内部再强转的解决方案。可能显得有些别扭。

编译器不允许强制转换,那就用union来实现。


union
{
  void *(*trfunc)(void *);
  void *(lock_client_cache::*memfunc)();
} func;

func.memfunc = &lock_client_cache::do_thread;
pthread_t pid;
pthread_create(pid, 0, func.trfunc, this);
pthread_detach(pid);

do_thread是非静态类成员函数,没有参数。posix库的情况下返回一个void*,win32的线程的情况下返回void。

*该方法适用于只需要传递this指针的情况,如果需要传递多个参数,还要按老方法。