很久以前已经说过, C++指向类成员函数的指针非常变态, 如果要把类成员函数作为线程 pthread_create 的参数, 就更复杂!
class A{ public: void run(){ } static void *run_helper(void *arg){ ((A *)arg)->run(); return (void *)NULL; } }; A a; pthread_t t; pthread_create(&t, NULL, &A::run_helper, &a);
本来我们希望把 a.run 作为参数, 为此, 必须创建一个 static 的 run_helper() 函数, 然后在 run_helper() 中调用 run().