Обычный способ передачи функции в качестве аргументов в pthreads для метода pthread_create:
pthread_create(&thread,NULL,func,(void*)arg)
в то время как func () объявлена / определена как
void* func(void* arg);
но всякий раз, когда я хочу вызвать pthread_create в отдельном .cpp в Visual Studio 2012, он выдает следующую ошибку, как показано на рисунке
но ошибка исчезнет, если я определю функцию static.
static void* func(void* arg);
Любые предложения, как передать его без ошибок, не делая его статичным?
Сообщение об ошибке говорит, что AppendData_Linux
является функция-член из XMLParse
класс, и это не может преобразовать в указатель на нормальная (не членская) функция требуется pthread_create
,
Вот решение:
class X {
void* arg;
public:
void* func() { ... }
static void* thunk(void* self) {
return reinterpret_cast<X*>(self)->func();
}
};
X obj;
pthread_create(thread, NULL, &X::thunk, reinterpret_cast<void*>(&obj));