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 :

Probleme avec CTimer dans une vue d'une appli


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut Probleme avec CTimer dans une vue d'une appli
    Bonjour a tous,

    en désespoir de cause (et en espérant avoir fait une bêtise si grosse que je ne la vois pas ), je me tourne vers vous.

    Voici le probleme : j'ai une appli qui deroule un protocole et chaque etape graphique du protocole est affiché via des CDialog.

    Dans plusieurs vues, j'utilise des Timers (CTimer via SetTimer/KillTimer/OnTimer) et ca marche nickel depuis des lustres..
    Recemment, j'ai du refactoré une vue (appelons la vue_problématique) et j'ai besoin d'un Timer dans cette derniere et la stupeur, le timer ne fonctionne pas.

    J'ai bien la macro ON_WM_TIMER dans la map des messages, ainsi que la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    afx_msg void OnTimer(UINT nIDEvent);
    declarée et implementée mais je n'y passe jamais alors que l'appel au SetTimer est ok.

    Plus etrange encore, les timers de la vue generique sont desactivés le temps que cette vue_problématique est affichée. C'est comme si j'avais declenché une commande qui desactive tous les timers des l'appli qd cette vue_problématique est affichée. Des que je la quitte, tout refonctionne correctement !

    Y aurait-il une methode d'un CDialog ou CWnd connue pour desactiver les timers ?

    Si quelqu'un a une idée, une suggestion, je suis preneur car je ne sais vraiment plus quoi faire pour trouver l'origine de ce probleme !

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 463
    Par défaut
    J'ai l'impression que vous utilisez des Timer de fenêtre et non des Timer système.

    Ces Timer de fenêtre reposent sur la pseudo-génération d'un message de fenêtre WM_TIMER.

    Ce mécanisme simplifie la programmation par l'utilisation de routine dans le thread graphique et pas de fonction de callback dans des threads différents.

    Mais ce mécanisme est sujet à beaucoup d'interférence dont la génération intempestives d'autres messages plus prioritaires. Et je ne suis même pas sur que WM_TIMER passe avec WM_PAINT, je pense même le contraire.

    Résultat de mes supputations, vos timers ne se déclenchent pas car votre "vue_problématique" génère probablement en continu des messages WM_PAINT (directement ou via Invalidate()).

  3. #3
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut
    Bonsoir

    Citation Envoyé par bacelar Voir le message
    J'ai l'impression que vous utilisez des Timer de fenêtre et non des Timer système.
    Effectivement. Comment utilise-t-on des timers systeme ?

    Citation Envoyé par bacelar Voir le message
    Ces Timer de fenêtre reposent sur la pseudo-génération d'un message de fenêtre WM_TIMER.

    Ce mécanisme simplifie la programmation par l'utilisation de routine dans le thread graphique et pas de fonction de callback dans des threads différents.

    Mais ce mécanisme est sujet à beaucoup d'interférence dont la génération intempestives d'autres messages plus prioritaires. Et je ne suis même pas sur que WM_TIMER passe avec WM_PAINT, je pense même le contraire.

    Résultat de mes supputations, vos timers ne se déclenchent pas car votre "vue_problématique" génère probablement en continu des messages WM_PAINT (directement ou via Invalidate()).
    Je viens de faire le test et le message WM_PAINT est appelé une fois lors du rendu initial de la page.
    Ensuite, cette page attend l'arrivée de données par reseau (images medicales). Le Timer me sert a detecter que l'envoi des images est terminé pour mettre a jour le GUI.
    Durant l'attente, aucun appel a OnPaint (tracé via la macro TRACE)

    Le mystere reste entier ....

    V

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 463
    Par défaut
    Utilisez Spy++ pour espionner les messages reçus par une fenêtre.

    Utilisez vous des MessageBox, ou autres Dialogues modales ?
    http://www.ms-news.net/f3291/my-dial...s-2682902.html

  5. #5
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Peut-on voir le code de la fenêtre incriminée ?

  6. #6
    Membre éclairé
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    Peut-on voir le code de la fenêtre incriminée ?
    umh, ca va etre difficile car faudrait que je poste plusieurs fichiers (et en + c'est du code d'entreprise....)

    Mais dis moi ce que tu veux savoir, je te repondrai de maniere la precise

Discussions similaires

  1. Passer d'une vue 1 à une vue 2
    Par pitchu dans le forum Android
    Réponses: 2
    Dernier message: 27/04/2015, 21h40
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 1
    Dernier message: 02/09/2013, 13h24
  4. Réponses: 8
    Dernier message: 01/06/2007, 00h13
  5. [linker]Probleme avec SDL dans une application Ogre3D
    Par smarties dans le forum Visual C++
    Réponses: 2
    Dernier message: 15/01/2007, 14h29

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