2010-08-27 5 views
2

La version simplifiée de mon code se présente comme suit:Discussion Boost ne pas détacher quand il est créé en fonction de membre d'une classe

class threadCreator 
{ 
    void threadFunction(void){ 
    // use some private data members and do something. 
    } 
    void createThread(void){ 
     boost::thread myThread(
       boost::bind(&threadCreator::threadFunction,this)); 
     myThread.detach(); 
    } 
} 

Ce programme attend le thread pour terminer l'exécution, puis quitte, même si J'appelle une méthode de détachement sur le fil. Si je supprime la classe et crée mon thread juste dans une fonction, cela semble fonctionner comme prévu.

Je pense que cela a quelque chose à voir avec l'objet qui reste en mémoire. Cependant, je suis apprenant C++ et je ne sais pas comment résoudre ce problème.

+0

vous êtes témoin d'un RAII très probable. un destructeur implicite est appelé lorsque votre fonction se termine sur les objets alloués sur la pile. également, les appels de destructeur de thread se détachent également, donc je ne sais pas quel est l'effet de l'appel de deux fonctions de détachement. essayez d'allouer vos threads en utilisant new à la place – Anycorn

Répondre

2

Je pense qu'il vous manque quelque chose car pour que le programme attende la fin de l'exécution du thread, vous devriez avoir un .join() quelque part sur cet objet thread. Le comportement par défaut n'est pas d'attendre la fin de l'exécution du thread.

Il n'est pas nécessaire d'appeler .detach() sur le thread, le thread sera quand même détaché du thread de l'objet à la fin de la portée.

Questions connexes