pthread编译错误

时间:2012-06-04 09:16:40

标签: pthreads

我正在尝试使用pthread创建一个线程。到目前为止,我有这个:

sample.h:

void* ReceiveLoop(void*);
pthread_t mythread;

sample.cpp的:

void* ReceiveLoop(void*) {
  cout<<"whatever";
}

void sample::read() {
  pthread_create(&mythread, NULL, ReceiveLoop, NULL);
}

我认为可以阅读一些有关此内容的帖子。我也试过

pthread_create(&mythread, NULL, &ReceiveLoop, NULL);

但我明白了:

.cpp:532: error: no matches converting function 'ReceiveLoop' to type 'void* (*)(void*)'
.cpp:234: error:                 void* sample::ReceiveLoop(void*)

任何人都可以帮助我吗?感谢。

1 个答案:

答案 0 :(得分:1)

我记得gcc / g ++的旧版本之间存在一些与此类错误有关的特性。您没有指出您正在使用的编译器。

继续并将传递给ReceiveLoop的void *参数命名为:

 void ReceiveLoop(void* threadarg);

 void* ReceiveLoop(void* threadarg){ cout<<"whatever"; }

出于某种原因,我似乎记得这是我能够在一些随机编译器上编译特定代码的唯一方法,即使实际上没有使用传入的参数。

此外,如果ReceiveLoop是类的成员函数,则需要将其声明为static。

class sample
{
 public:

    void ReceiveLoopImpl()
    {
        cout<<"whatever";
    }

    static void* ReceiveLoop(void* threadargs)
    {
        return ((sample*)threadargs)->RecieveLoopImpl();
    }

    void read()
    {
         pthread_create(&mythread, NULL, sample::ReceiveLoop, this);
    }

};