pthreadパラメータとして取り込んで、問題を解決するためにvoid *(*start_routine)(void* userPtr)使用できることを望んでいましたが、できません。std::mem_fun
void * threadFunc()関数を使用してuserPtr、クラスとして機能させたいと思います(userPtr->threadFunc())。私が使用できるのと同様の機能はありstd::mem_funcますか?
pthreadパラメータとして取り込んで、問題を解決するためにvoid *(*start_routine)(void* userPtr)使用できることを望んでいましたが、できません。std::mem_fun
void * threadFunc()関数を使用してuserPtr、クラスとして機能させたいと思います(userPtr->threadFunc())。私が使用できるのと同様の機能はありstd::mem_funcますか?
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を確認することをお勧めします。そこでは、スレッド、ロック、ミューテックスなどのクラスを取得し、よりオブジェクト指向の方法でマルチスレッドを実行できます。