1

ヘッダーと.cpp定義ファイルを含むpthreadを含むクラスを作成しています。

.hiには:

class test
{
    public:
        int a;
    ...
    private:
        typedef void (*myfunc)(void *p);
        static myfunc pthreadRun;
}

.cppで私は持っています:

...
typedef void (*myfunc)(void *p);
myfunc test::pthreadRun
{
    this->a = 10;
    pthread_exit(NULL);
}
...

エラーが発生します:void (* test::pthreadRun)(void*)はの静的メンバーではなく、class test他のエラーもたくさんありますが、これは最初のエラーです。

静的と宣言されているので混乱しています:/

pthreadRunのスレッド実行関数ですpthread_create()

私は何が欠けていますか?

4

1 に答える 1

1

あなたが何をしようとしているのかを正確に推測するのは難しいですが、最初に私はあなたのコードを次のように書き直すと思います:

class test
{
    public:
        int a;
    ...
    private:
        static void pthreadRun(void *p);
}

void test::pthreadRun(void *p)
{
    // this->a = 10; This line is now a big problem for you.
    pthread_exit(NULL);
}

したがって、これは静的関数であるため、このコンテキストからメンバー要素(this-> aなど)にアクセスすることはできませんが、探している種類の構造です。

一般に、これを処理する方法は、thisポインターを使用してスレッドを開始することです。これにより、関数で次のことが可能になります。

void test::pthreadRun(void *p)
{
     test thistest=(test)p;
     thistest->a=10;  //what you wanted
     thistest->pthreadRun_memberfunction(); //a wrapped function that can be a member function
    pthread_exit(NULL);
}

これらすべての関数をプライベート/保護することができるはずです(このクラス内からスレッドを開始し、そうすることがおそらく望ましいと思います。

于 2013-03-01T11:02:23.623 に答える