在pthreads中为pthread_create方法传递函数作为参数的常规方法是
pthread_create(&thread,NULL,func,(void*)arg)
而func()被声明/定义为
void* func(void* arg);
但是每当我想在visual studio 2012中的单独的.cpp中调用pthread_create时,就会出现以下错误,如图所示
但如果我定义函数static,则错误就会消失。
static void* func(void* arg);
有任何建议如何在不使其成为静态的情况下正确传递它吗?
答案 0 :(得分:0)
错误消息表明AppendData_Linux
是XMLParse
类的成员函数,并且无法转换为指向普通(非成员)函数的指针pthread_create
需要。
这是解决方案:
class X {
void* arg;
public:
void* func() { ... }
static void* thunk(void* self) {
return reinterpret_cast<X*>(self)->func();
}
};
X obj;
pthread_create(thread, NULL, &X::thunk, reinterpret_cast<void*>(&obj));