mem_fun falhar, pthread e ptr classe
-
19-08-2019 - |
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?
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.