Bonjour alors je vous expose mon probleme. Je suis entrain de tenter de creer un petit jeu. Dans celui-ci j'ai implementé trois classes :
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
16
17
18
19
 
class Thread
{
private:
    Glib::Thread* _thread;
    bool _is_joignable;
    bool _is_running;
 
public:
    static void init();
    Thread(bool joignable=FALSE);
    virtual ~Thread();
    void start();
    virtual void run();
    virtual void stop();
    bool isJoignable()const;
    bool isRunning()const;
    static void sleep(unsigned long delay);
};
voici le code du run de la classe thread juste pour exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
void Thread::run(){
    while(true)cout << "Thread.run" << endl;
}
Puis j'ai concu la cette classe qui herite de thread

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
16
17
18
19
20
21
 
template <class T> class Agent : public Thread 
{ 
private: 
    queue<T>_messages; 
    string _name;
    Glib::Mutex _mutex;
    //Semaphore *_sem; 
 
public: 
    Agent(void); 
    Agent(string name); 
    virtual ~Agent(void); 
    virtual void initialize();                     
    virtual void finalize();                 
    bool haveMessages()const;             
    T readMessage();         
    void sendMessage(T message); 
    string getName()const;
    virtual void run();                     
};
Voici le corps de la méthode run ke j'ai cree juste pour voir le deroulement:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
template <class T> void Agent<T>::run(){
    while(true)cout << "Agent.run" << endl;
}
Et enfin voila mon probleme j'ai cree cette classe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
class GameEngineKeyboardReaderAgent: public Agent<XmlMessage>{
private:
    GameEngine* _engine;
    unsigned long _delay;
 
public:
    GameEngineKeyboardReaderAgent(GameEngine* engine,unsigned long delay=250000);
    virtual ~GameEngineKeyboardReaderAgent();
    virtual void run();
};
Lors de mon execution pourquoi c'est la méthode run de la classe Agent qui est exécutée et non la méthode run de la classe GameEngineKeyboardReaderAgent que j'ai cree?

J'espere que quelqu'un trouvera la solution a mon probleme.