IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[VC++ - MFC] Problème de Timer


Sujet :

MFC

  1. #1
    Membre régulier
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 85
    Points
    85
    Par défaut [VC++ - MFC] Problème de Timer
    Bonjour,

    J'ai un programme de type boîte de dialogue.

    La classe principale CMyAppDlg contient une instance de la classe CCommOne et une instance de la classe CCommTwo.
    CCommOne a été créée à l'aide de l'assistant et hérite d'une généric CWnd.
    CCommTwo a été elle aussi créée à l'aide de l'assistant et hérite d'une généric Cwnd.

    j'ai installé un timer pour chacune des classes. Il est géré avec OnTimer, déclenché par un SetTimer et tué par un KillTimer.

    Le timer de CMyAppDlg et de CCommOne fonctionne très bien.
    Mais le timer de CCommTwo ne fonctionne pas. On ne passe jamais dans OnTimer de cette classe bien que le SetTimer installé dans cette classe me retourne "le timer est en place".

    Croyant que j'avais mal implémenter ma 2nd classe j'en ai créée une autre qui a donné le même résultat.

    Auriez vous une idée du pourquoi de la chose ?



    Alice

  2. #2
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    sans code, il va falloir deviner :

    peut etre que les timer ont les meme id ?

  3. #3
    Membre régulier
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 85
    Points
    85
    Par défaut
    pour le code je ne peux pas vraiment en mettre directement ici.

    Par contre je peux te certifier que les timers n'ont pas du tout les même codes d'évènements !!!

    Chaque classe à sa propre fonction OnTimer :

    CCommOne::OnTimer(UINT nIDEvent)
    CCommTwo::OnTimer(UINT nIDEvent)
    CMyAppDlg::OnTimer(UINT nIDEvent)

    Et les timers sont déclenchés pour CCommOne dans cette même classe, pour CCommTwo dans cette même classe et pour CMyAppDlg dans cette classe.

    Les events sont déclarés dans un .h commun aux 3 classes.
    Et je ne prends pas deux fois le même events !!!

    Si c'était le cas je devrais avoir différentes réactions de mon app mais ce n'est pas le cas : il ne se passe strictement rien.

    j'ai essayé de ne lancer que le timer de CMyAppDlg : pas de problème il fonctionne.
    puis uniquement le timer de CCommOne : pas de problème il fonctionne.
    Puis que le timer de CCommTwo : il ne fonctionne pas, bien que le SetTimer me dise le contraire.


  4. #4
    Membre régulier
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 85
    Points
    85
    Par défaut
    j'ai recréer une classe très simple avec un timer lancé dans le constructeur :

    Test.cpp :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    // Test.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "myApp.h"
    #include "Test.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
    // CTest
     
    #define TEST 9999
    #define PERIOD_TEST 2
     
    CTest::CTest()
    {
       AfxMessageBox("test classe") ;
       SetTimer(TEST,PERIOD_TEST,NULL) ;
    }
     
    CTest::~CTest()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CTest, CWnd)
    	//{{AFX_MSG_MAP(CTest)
    	ON_WM_TIMER()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
     
    /////////////////////////////////////////////////////////////////////////////
    // CTest message handlers
     
    void CTest::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Add your message handler code here and/or call default
       if (nIDEvent == TEST)
       {
          KillTimer(TEST) ;
          ofstream file ;
          file.open("test_timer.txt") ;
          file << "test timer : ok" << endl ;
          file.close() ;
       }
     
    	CWnd::OnTimer(nIDEvent);
    }
    test.h
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #if !defined(AFX_TEST_H__F8E12BEE_3CF6_490D_AAC5_8CCDC1DDA864__INCLUDED_)
    #define AFX_TEST_H__F8E12BEE_3CF6_490D_AAC5_8CCDC1DDA864__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // Test.h : header file
    //
     
    /////////////////////////////////////////////////////////////////////////////
    // CTest window
     
    class CTest : public CWnd
    {
    // Construction
    public:
    	CTest();
     
    // Attributes
    public:
     
    // Operations
    public:
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CTest)
    	//}}AFX_VIRTUAL
     
    // Implementation
    public:
    	virtual ~CTest();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CTest)
    	afx_msg void OnTimer(UINT nIDEvent);
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
     
    /////////////////////////////////////////////////////////////////////////////
     
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
     
    #endif // !defined(AFX_TEST_H__F8E12BEE_3CF6_490D_AAC5_8CCDC1DDA864__INCLUDED_)
    -> une instance de la classe Test est créé en tant qu'attribut de la classe CMyApp mais on ne va pas dans le timer : pas de création de fichier test.

  5. #5
    Membre régulier
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Points : 85
    Points
    85
    Par défaut Fin....
    En faîte ma classe mère CMyAppDlg a un timer qui fonctionne correctement et pour le cas de ses deux filles (CCommOne et CCommTwo) non.

    Le SetTimer appelé par les filles fonctionne et me répond que tout c'est bien passé. Mais on ne passe jamais dans le OnTimer de ces deux classes.

    J'ai régardé si l'évènement timer appelé dans ce cas arrivait dans le OnTimer de la mère mais ce n'est pas le cas.



    Du coup pour résoudre mon problème, je passe par le OnTimer de la mère car de toute façon les fonctions, qui déclenchaient les ex timers des filles, étaient activées par la mère.

    Désolée du dérangement.



    Alice

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  2. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  3. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  4. [MFC] problème d'éxécution
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 15/03/2004, 10h31
  5. [MFC][Debutant] UpdateData, timer et CEdit
    Par Fladnag dans le forum MFC
    Réponses: 2
    Dernier message: 29/01/2004, 06h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo