Реализация pthreads в .h и .cpp

Обычный способ передачи функции в качестве аргументов в 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);

Любые предложения, как передать его без ошибок, не делая его статичным?

0

Решение

Сообщение об ошибке говорит, что 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));
0

Другие решения


По вопросам рекламы [email protected]