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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top