質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top