mem_fun falla, pthread y class ptr
-
19-08-2019 - |
Pregunta
pthread
toma como parámetro void * (* start_routine) (void * userPtr)
, esperaba poder usar std :: mem_fun
para resolver mi problema pero no puedo.
Me gustaría usar la función void * threadFunc ()
y hacer que userPtr
actúe como la clase (userPtr- > threadFunc ()) . ¿Hay alguna función similar a
std :: mem_func
que pueda usar?
Solución
Una forma es utilizar una función global que llame a su función de hilo principal:
class MyThreadClass {
public:
void main(); // Your real thread function
};
void thread_starter(void *arg) {
reinterpret_cast<MyThreadClass*>(arg)->main();
}
Luego, cuando desee iniciar el hilo:
MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);
Por otro lado, si realmente no necesita usar pthreads manualmente, puede ser una buena idea echar un vistazo a Boost.Thread , una buena biblioteca de subprocesos de C ++. Allí obtienes clases para subprocesos, bloqueos, mutex, etc., y puedes hacer subprocesos múltiples de una manera mucho más orientada a objetos.