Pthread和函数指针

时间:2016-06-27 15:22:38

标签: c++ pthreads

我对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的理解是正确。谢谢! :)

1 个答案:

答案 0 :(得分:2)

  1. 您的功能签名必须为void * function (void*)

  2. 如果从c ++代码调用,该方法必须是静态的:

    class myClass
    {
        public:
        static void * function(void *);
    }
    
  3. 使用非静态方法的解决方案如下:

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