Bonjour à tous, mon problème a certainement été évoqué mais tous mes axes de recherche mènent à des recherches infructueuses...
Le voici donc :
J'ai développé 2 classes dont une qui est la fille de l'autre
headers :
implémentation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Parent { int val; Parent(); virtual ~Parent(); void start(void); virtual void run(void); } class Enfant : Parent { Enfant(); virtual ~Enfant(); void run(void); }
voici mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Parent::Parent() { } Parent::~Parent() { } void Parent::start() { boost::thread(boost::bind(&Parent::run, this)); } void Parent::run() { std::cout << "problème" << std::endl; } Enfant::Enfant() { } Enfant::~Enfant() { } void Enfant::run() { std::cout << "Ok" << std::endl; }
Vous l'avez compris je devrais avoir dans 100% des cas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 main() { Enfant enfant; enfant.start(); }
"Ok"
Malheureusement en réalité je n'ai ce résultat que dans 90% des cas environ. Parfois il m'affiche "Problème", ce qui signifie que la méthode run() du parent a été appelée...
J'en déduis que l'appel a start a été effectué dans le parent et éventuellement que l'enfant n'a même pas été complètement instancié.
Que dois-je en conclure ? Est-ce un problème conceptuel ou bien d'implémentation ? Est-ce une particularité de boost::thread que je n'aurais pas pris en compte ?
Merci pour votre aide
Tristan
Partager