0

pthread_create メソッドの pthreads で関数を引数として渡す通常の方法は次のとおりです。

pthread_create(&thread,NULL,func,(void*)arg)

func() が次のように宣言/定義されている間

void* func(void* arg);

しかし、ビジュアルスタジオ2012で別の.cppでpthread_createを呼び出したいときはいつでも、写真に示すように次のエラーが発生します

ビジュアルスタジオのエラー

しかし、関数 static を定義すると、エラーはなくなります。

static void* func(void* arg);

静的にせずにエラーなしで渡す方法はありますか?

4

1 に答える 1

0

エラーメッセージは、それAppendData_Linuxがクラスのメンバー関数であり、が必要とする通常の (非メンバー) 関数XMLParseへのポインターに変換できないことを示しています。pthread_create

ここに解決策があります:

class X {
   void* arg;
public:
   void* func() { ... }

   static void* thunk(void* self) {
     return reinterpret_cast<X*>(self)->func();
   }
};

X obj;
pthread_create(thread, NULL, &X::thunk, reinterpret_cast<void*>(&obj));
于 2014-12-17T14:08:25.870 に答える