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を確認することをお勧めします。そこでは、スレッド、ロック、ミューテックスなどのクラスを取得し、よりオブジェクト指向の方法でマルチスレッドを実行できます。