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 に答える