Maison >développement back-end >C++ >Comment puis-je utiliser les fonctions membres de la classe C dans pthreads ?
Incorporation des fonctions membres de classe dans les threads
En C, les fonctions membres de classe portent intrinsèquement un paramètre caché appelé "this". Cela pose un défi lorsque l'on tente de créer des threads à l'aide de fonctions membres, car la fonction pthread_create() de la bibliothèque standard attend un pointeur de fonction sans de tels paramètres.
Erreur de compilation : impossible de convertir le pointeur de fonction
Comme l'illustre l'extrait de code initial, essayer de transmettre une fonction membre de classe à pthread_create() mène directement à une compilation erreur :
pthread_create(&t1, NULL, &c[0].print, NULL);
Le compilateur se plaint de ne pas pouvoir convertir le pointeur de fonction membre (void* (tree_item::*)(void*)) vers le type de pointeur de fonction attendu (void* (*)(void *)).
Solution : Méthode de classe statique ou fonction indépendante
Pour contourner ce problème, il y a existe deux approches viables :
Méthode de classe statique :
Définissez une méthode de classe statique (qui n'accepte pas de pointeur "this") qui encapsule le souhaité fonctionnalité :
class C { public: void *hello(void) { std::cout << "Hello, world!" << std::endl; return 0; } static void *hello_helper(void *context) { return ((C *)context)->hello(); } };
Indépendant Fonction :
Créez une fonction distincte qui sert de wrapper autour de la fonction membre de la classe, en passant explicitement le pointeur "this" comme argument :
void hello_wrapper(void *context) { C *object = (C *)context; object->print(); }
Création de threads à l'aide de la méthode de classe statique ou de la fonction Wrapper
Avec l'une ou l'autre de ces approches, vous pouvez désormais utiliser pthread_create() pour créer des threads qui exécuteront les fonctions membres de la classe souhaitées :
C c; pthread_create(&t, NULL, &C::hello_helper, &c); // Static Class Method pthread_create(&t, NULL, &hello_wrapper, &c); // Wrapper Function
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!