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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top