Domanda

pthread accetta come parametro void * (* start_routine) (void * userPtr) , speravo di poter usare std :: mem_fun per risolvere il mio problema ma non posso.

Vorrei usare la funzione void * threadFunc () e fare in modo che userPtr funga da classe (userPtr- > threadFunc ()) . Esiste una funzione simile a std :: mem_func che posso usare?

È stato utile?

Soluzione

Un modo è usare una funzione globale che chiama la tua funzione thread principale:

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

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

Quindi, quando vuoi iniziare il thread:

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

D'altra parte, se non è necessario utilizzare manualmente pthreads, potrebbe essere una buona idea dare un'occhiata a Boost.Thread , una buona libreria di thread C ++. Lì ottieni lezioni per thread, blocchi, mutex e così via e puoi fare multi-thread in un modo molto più orientato agli oggetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top