Pergunta

pthread leva em como seu void *(*start_routine)(void* userPtr) parâmetro, eu estava esperando que eu possa usar std::mem_fun para resolver o meu problema, mas eu não posso.

Gostaria de usar a função void * threadFunc() e ter o ato userPtr como o (userPtr->threadFunc()) classe. Existe uma função semelhante à std::mem_func que eu posso usar?

Foi útil?

Solução

Uma maneira é usar uma função global que chama sua função thread principal:

class MyThreadClass {
public:
  void main(); // Your real thread function
};

void thread_starter(void *arg) {
  reinterpret_cast<MyThreadClass*>(arg)->main();
}

Então, quando você quer começar o fio:

MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);

Por outro lado, se você realmente não precisa pthreads uso manualmente, ele pode ser uma boa idéia ter um olhar para Boost.Thread , um bom C ++ biblioteca de threads. Lá você obterá classes para fios, fechaduras, semáforos e assim por diante e pode fazer multi-threading em um mais maneira muito mais orientada a objetos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top