mem_funが失敗、pthreadおよびクラスptr
-
19-08-2019 - |
質問
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);
一方、本当にpthreadを手動で使用する必要がない場合は、 Boost.Thread 、優れたC ++スレッドライブラリ。そこで、スレッド、ロック、ミューテックスなどのクラスを取得し、よりオブジェクト指向の方法でマルチスレッドを実行できます。
所属していません StackOverflow