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