0

pthreadパラメータとして取り込んで、問題を解決するためにvoid *(*start_routine)(void* userPtr)使用できることを望んでいましたが、できません。std::mem_fun

void * threadFunc()関数を使用してuserPtr、クラスとして機能させたいと思います(userPtr->threadFunc())。私が使用できるのと同様の機能はありstd::mem_funcますか?

4

1 に答える 1

2

1 つの方法は、メイン スレッド関数を呼び出すグローバル関数を使用することです。

class MyThreadClass {
public:
  void main(); // Your real thread function
};

void thread_starter(void *arg) {
  reinterpret_cast<MyThreadClass*>(arg)->main();
}

次に、スレッドを開始する場合:

MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);

一方、pthreads を手動で使用する必要があまりない場合は、優れた C++ スレッド ライブラリであるBoost.Threadを確認することをお勧めします。そこでは、スレッド、ロック、ミューテックスなどのクラスを取得し、よりオブジェクト指向の方法でマルチスレッドを実行できます。

于 2009-01-19T05:42:05.700 に答える