pthread
接受作为它的参数void *(*start_routine)(void* userPtr)
,我希望我可以用它std::mem_fun
来解决我的问题,但我不能。
我想使用该功能void * threadFunc()
并将其userPtr
作为类(userPtr->threadFunc())
。有没有类似于std::mem_func
我可以使用的功能?
pthread
接受作为它的参数void *(*start_routine)(void* userPtr)
,我希望我可以用它std::mem_fun
来解决我的问题,但我不能。
我想使用该功能void * threadFunc()
并将其userPtr
作为类(userPtr->threadFunc())
。有没有类似于std::mem_func
我可以使用的功能?
一种方法是使用调用主线程函数的全局函数:
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++ 线程库。在那里,您可以获得线程、锁、互斥锁等类,并且可以以更加面向对象的方式进行多线程处理。