1

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

样本.h:

void* ReceiveLoop(void*);
pthread_t mythread;

示例.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*)

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

4

1 回答 1

1

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

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

 void ReceiveLoop(void* threadarg);

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

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

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

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

};
于 2012-06-04T09:41:28.737 回答