2009-06-24 6 views
7

Pouvez-vous annuler un thread Boost comme vous le feriez avec un pthread? J'écris un chien de garde simple pour terminer les threads de travail s'ils se plantent et il ne semble pas y avoir moyen d'annuler simplement un thread dans la bibliothèque Boost Thread.Boost Thread Annulation

Répondre

10

Ils ne prennent pas en charge l'annulation, ce qui est une bonne chose car cela peut causer toutes sortes de problèmes subtils. Jetez un oeil à la section des documents qui couvrent l'interruption de thread et l'exception boost :: thread_interrupted et faites quelque chose qui vous permet d'accomplir ce que vous voulez tout en nettoyant les choses.

+0

Il semble que l'interruption du thread ne vous aidera pas si le thread est coincé dans une boucle, ce qui est l'une des choses que j'essaie de protéger. Alors que j'abandonne la portabilité, je commence à penser que je préfère utiliser un gestionnaire de nettoyage pthread. –

+3

Ou placez un ou des points d'interruption quelque part dans la (les) boucle (s). Il ne devrait pas être beaucoup de performance, surtout si le fil est déjà long. Et le reste de l'infrastructure d'interruption est déjà en place. – Duck

2

Ils ne prennent pas en charge l'annulation de la boîte (comme l'a souligné Canard), mais en fonction du traitement passe à l'intérieur de votre thread de travail (s), j'envisager d'utiliser un boost::condition d'informer le fil qu'il devrait finir (proprement) à la première occasion.

Questions connexes