Вы можете инкапсулировать функцию, которую вы хотите вызвать, в объект функции, а затем вызвать этот объект функции из вашей функции 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_;
};
Во-вторых, определите функцию с соответствующей сигнатурой 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();