Bonjour,
J'explique mon problème qui est un peu complexe :
Je crée une classe thread générique qui fonctionne ainsi :
le constructeur de Thread apelle Start() qui crée le thread avec pthread_create et _starter avec en argument data this
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Thread { friend void * _starter(void * data); bool Start(); virtual void task() ; //tache principale qui doit etre redefinie }; class MonThread : public Thread { virtual void task(); };
_starter apelle la fonction task() qui est redéfinie dans ma classe MonThread qui herite de la classe Thread.
Le probleme c'est que la fonction task apellée dans _starter est celle de la classe Thread et non celle redéfinie dans ma nouvelle classe MonThread.
J'ai compris que c'est parce que lors de la création de l'objet thread la fonction task redéfinie n'existe pas encore donc il apelle celle de base.
J'ai trouvé un moyen de contourner le probleme en mettant un sleep(1) juste avant d'apeller task() dans ma classe thread. Du coup il apelle bien la fonction redéfinie.
Y a t'il un moyen plus propre de faire ca, comme par exemple en attendant la création de l'objet avant d'apeller la fonction autrement que par un sleep ?
merci
Partager