вы должны использовать статический метод в этом случае и да, посмотрите в man pthread_create.
Подпись функции значительна.
Также, если вы создадите поток, как показывает ваш код, он будет прерван, как только выйдет main ().
Вам нужно дождаться завершения потока. Я приведу пример ниже. Это не идеально, но кажется достаточно хорошим для демонстрации.
Обратите внимание на переход статического -> нестатического метода при обработке начала потока. Это общий подход (хотя и не единственный возможный).
#include <stdio.h>
#include <pthread.h>
class Test {
public:
static void* Run(void* me) {
static_cast<Test*>(me)->RunMe();
return NULL;
}
private:
void RunMe() {
printf("%p: %p is running.\n", pthread_self(), this);
}
};
int main() {
pthread_t tid;
Test test;
printf("%p: creating thread for %p is running.\n", pthread_self(), &test);
pthread_create(&tid, NULL, Test::Run, &test);
printf("%p: waiting %p to finish.\n", pthread_self(), &test);
// In real code you should check 'create' operation result.
pthread_join(tid, NULL);
printf("%p: OK, exiting\n", pthread_self());
return 0;
}