0

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

我想使用该功能void * threadFunc()并将其userPtr作为类(userPtr->threadFunc())。有没有类似于std::mem_func我可以使用的功能?

4

1 回答 1

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);

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

于 2009-01-19T05:42:05.700 回答