mem_fun失败,pthread和class ptr

时间:2009-01-19 05:14:41

标签: c++ pthreads std member-functions

pthread接受参数void *(*start_routine)(void* userPtr),我希望我可以使用std::mem_fun解决我的问题,但我不能。

我想使用函数void * threadFunc()并让userPtr充当类(userPtr->threadFunc())。我可以使用类似于std::mem_func的函数吗?

1 个答案:

答案 0 :(得分:2)

一种方法是使用调用主线程函数的全局函数:

class MyThreadClass {
public:
  void main(); // Your real thread function
};

void thread_starter(void *arg) {
  reinterpret_cast<MyThreadClass*>(arg)->main();
}

然后,当你想要启动线程时:

MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);

另一方面,如果你真的不需要手动使用pthreads,那么看看Boost.Thread,一个很好的C ++线程库可能是个好主意。在那里,您可以获得线程,锁,互斥体等类,并且可以以更加面向对象的方式执行多线程。