あなたは関数オブジェクトで呼び出したい機能をカプセル化して、あなたのpthreadの機能の中から、その関数オブジェクトを呼び出すことができます:
まず、あなたの関数呼び出しをカプセル化する関数オブジェクトを定義します。
struct foo_functor {
// Construct the object with your parameters
foo_functor(int a) : ret_(), a_(a) {}
// Invoke your function, capturing any return values.
void operator()() {
ret_ = foo(a_);
}
// Access the return value.
bool result() {
return ret_;
}
private:
bool ret_;
int a_;
};
第2に、関数オブジェクトを呼び出す適切なpthreadシグネチャで関数を定義します。
// The wrapper function to call from pthread. This will in turn call
extern "C" {
void* thread_func(void* arg) {
foo_functor* f = reinterpret_cast<foo_functor*>(arg);
(*f)();
return 0;
}
}
最後に、あなたの関数オブジェクトをインスタンス化し、thread_func
関数のパラメータとして渡します。
foo_functor func(10);
pthread_t pid;
pthread_create(&pid, NULL, thread_func, &func);
pthread_join(pid, NULL);
bool ret = func.result();
出典
2012-01-27 04:47:13
DRH
私は無礼であるということではありませんが、C++を初めてお使いの場合は、言語を使用する経験が増えるまで、可能な限りスレッドから遠く離れないようにしてください。 –
私は学生ですから、残念ながら、それは選択肢ではありません。それが何か慰めであるならば、私は以前にスレッドを使用していましたが、C++ではそうではありません – user1172252
質問に必要ないくつかの重要なビット:関数はメンバ関数ですか?もしそうなら、それはインスタンスメンバかスタティックですか? –