Meilleur moyen de démarrer un thread en tant que membre d'une classe C ++?
Je me demandais la meilleur façon de commencer un pthread qui est membre d'une classe C++? Ma propre approche suit comme une réponse...
source d'informationauteur jdt141
Vous devez vous connecter pour publier un commentaire.
J'ai l'habitude d'utiliser une fonction membre statique de la classe, et l'utilisation d'un pointeur vers la classe que le void * paramètre. Cette fonction peut ensuite effectuer thread de traitement, ou d'appeler à un autre non-statique de la fonction de membre de la classe de référence. Cette fonction peut alors faire référence à tous les membres de la classe sans maladroite de la syntaxe.
Cela peut être fait simplement en utilisant la bibliothèque boost, comme ceci:
Notes:
En C++11, vous pouvez faire la même chose mais sans boost
Vous avez pour l'amorçage à l'aide de la void* paramètre:
J'ai utilisé trois méthodes décrites ci-dessus.
Quand j'ai d'abord utilisé le filetage en c++, j'ai utilisé fonctions membres statiques, puis ami des fonctions et enfin la bibliothèques BOOST. Actuellement je préfère BOOST. Au cours de la dernière plusieurs années, je suis devenu tout à fait le coup de pouce bigot.
BOOST est pour le C++ CPAN est de Perl. 🙂
La bibliothèque boost fournit une copie mécanisme, qui permet de transférer l'information de l'objet
pour le nouveau thread. Dans l'autre boost exemple boost::bind seront copiés avec un pointeur, ce qui est également copié. Ainsi, vous aurez à prendre soin de la validité de votre objet afin de prévenir une balançant pointeur. Si vous mettez en œuvre l'opérateur() et de fournir un constructeur de copie au lieu de cela et de passer de l'objet directement, vous n'avez pas à s'en soucier.
Beaucoup plus solution, qui évite beaucoup d'ennuis:
L'autre boost exemple crée un objet thread sur le tas, bien qu'il n'y a aucun sens de le faire.