mem_fun échoue, pthread et ptr de classe
-
19-08-2019 - |
Question
pthread
prend comme paramètre void * (* start_routine) (void * userPtr)
, j'espérais pouvoir utiliser std :: mem_fun
pour résoudre mon problème mais je ne peux pas.
Je voudrais utiliser la fonction void * threadFunc ()
et laisser le userPtr
agir comme la classe (userPtr- > threadFunc ())
. Existe-t-il une fonction similaire à std :: mem_func
que je puisse utiliser?
La solution
Une solution consiste à utiliser une fonction globale qui appelle la fonction de votre fil principal:
class MyThreadClass {
public:
void main(); // Your real thread function
};
void thread_starter(void *arg) {
reinterpret_cast<MyThreadClass*>(arg)->main();
}
Ensuite, lorsque vous souhaitez démarrer le fil de discussion:
MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);
D'autre part, si vous n'avez pas vraiment besoin d'utiliser pthreads manuellement, il peut être judicieux de consulter Boost.Thread , une bonne bibliothèque de threads C ++. Là, vous obtenez des classes pour les threads, les verrous, les mutex, etc., et pouvez faire du multi-threading de manière beaucoup plus orientée objet.