Я считаю, что обычной практикой является создание функции-обертки для любого метода потока:
struct Foo {
void someMethod() {
// ... the actual method ...
}
static void* someMethodWrap(void* arg) {
((Foo*) arg)->someMethod();
return 0;
}
void callSomeMethodInOtherThread() {
pthread_create(thread, attr, someMethodWrap, this);
}
};
Передача дополнительных параметров требует немного больше усилий, но это общая идея.
К счастью, std::thread
из следующего стандарта делает нашу жизнь намного проще ... но это еще впереди.