我对pthread的工作方式有点困惑 - 具体来说,我很确定pthread接受一个指向一个函数的指针,该函数将一个void指针作为一个参数(如果我错了就纠正我),并且我已经声明了以这种方式运作,但我仍然收到错误。这是我正在努力的代码:
void eva::OSDAccessibility::_resumeWrapper(void* x)
{
logdbg("Starting Connection.");
_listener->resume();
logdbg("Connected.");
pthread_exit(NULL);
}
void eva::OSDAccessibility::resumeConnection()
{
long t;
_listener->setDelegate(_TD);
pthread_t threads[1];
pthread_create(&threads[0], NULL, &eva::OSDAccessibility::_resumeWrapper, (void *)t);
}
我得到的错误是:
No matching function for call to pthread_create.
你不一定要告诉我如何修复代码(虽然当然会受到赞赏),我更感兴趣的是为什么会出现这个错误,如果我对pthread的理解是正确。谢谢! :)
答案 0 :(得分:2)
您的功能签名必须为void * function (void*)
如果从c ++代码调用,该方法必须是静态的:
class myClass
{
public:
static void * function(void *);
}
使用非静态方法的解决方案如下:
class myClass
{
// the interesting function that is not an acceptable parameter of pthread_create
void * function();
public:
// the thread entry point
static void * functionEntryPoint(void *p)
{
((myClass*)p)->function();
}
}
并启动主题:
myClass *p = ...;
pthread_create(&tid, NULL, myClass::functionEntryPoint, p);