Один из способов - использовать глобальную функцию, которая вызывает функцию основного потока:
class MyThreadClass {
public:
void main(); // Your real thread function
};
void thread_starter(void *arg) {
reinterpret_cast<MyThreadClass*>(arg)->main();
}
Затем, когда вы хотите запустить поток:
MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);
С другой стороны, если вам действительно не нужно использовать pthreads вручную, было бы неплохо взглянуть на Boost.Thread , хорошую библиотеку потоков C ++. Там вы получаете классы для потоков, блокировок, мьютексов и т. Д. И можете выполнять многопоточность гораздо более объектно-ориентированным способом.