pthread
接受参数void *(*start_routine)(void* userPtr)
,我希望我可以使用std::mem_fun
解决我的问题,但我不能。
我想使用函数void * threadFunc()
并让userPtr
充当类(userPtr->threadFunc())
。我可以使用类似于std::mem_func
的函数吗?
答案 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 ++线程库可能是个好主意。在那里,您可以获得线程,锁,互斥体等类,并且可以以更加面向对象的方式执行多线程。