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 :

[Débutant] Utilisation d'un timer


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Points : 59
    Points
    59
    Par défaut [Débutant] Utilisation d'un timer
    Bonjours à tous ,

    Je souhaite utiliser un timer pour appeler un MessageBox toutes les 4 secondes. voici mon code :

    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
    void CFreeSpaceDoc::LanceTimer()		
    {
     
    MSG msg;
    UINT_PTR v_Timer;
    short Cpt=0;
     
    v_Timer = SetTimer(NULL,NULL,4000,NULL);
     
    while(GetMessage(&msg,NULL,0,0))
      {
      if(msg.message==WM_TIMER)
    	{
    	MessageBox(NULL,"Déjà 4 secondes de passées!","Info",MB_OK);	  
    	Cpt++;
    	}
      else
    	{ 
    	if (Cpt> 4) 
    		{			
    		KillTimer(NULL,v_Timer);
    		PostQuitMessage(0);		
    		}
    	}
      }
    }
    Le premier MessageBox est bien appelé au bout de 4 secondes, mais les 4 autres MessageBox apparaissent immédiatement sans le temps de pause de 4 secondes. Comment puis-je faire pour ne les afficher qu'au bout de 4 secondes.

    Si quelqu'un peu m'aider... Merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    y a pas de raisons

    mais il faut savoir que le messagebox bloque le thread, et tu recois plus de messages pendant ce temps

    je vois aussi que tu ne sortiras jamais de ta boucle vu comment est fait le if, sauf si tu recois d'autres messages que WM_TIMER

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Selut, he bien c pa tres compliqué, passe par l'évenement WM_TIMER et déclare un identifiant ID_TIMER dans tes ressources. ensuite procède comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void CTestTimerDlg::OnButton1() 
    {
    	SetTimer(ID_TIMER, 1000, NULL);
    }
     
    void CTestTimerDlg::OnTimer(UINT nIDEvent) 
    {
    	if(nIDEvent == ID_TIMER)
    	{
    		MessageBox("4 secondes se sont écoulées !");
    	}
    	CDialog::OnTimer(nIDEvent);
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Nicolas69
    Selut, he bien c pa tres compliqué, passe par l'évenement WM_TIMER et déclare un identifiant ID_TIMER dans tes ressources. ensuite procède comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void CTestTimerDlg::OnButton1() 
    {
    	SetTimer(ID_TIMER, 1000, NULL);
    }
     
    void CTestTimerDlg::OnTimer(UINT nIDEvent) 
    {
    	if(nIDEvent == ID_TIMER)
    	{
    		MessageBox("4 secondes se sont écoulées !");
    	}
    	CDialog::OnTimer(nIDEvent);
    }

    Ben j'ai pas tout compris... . Voici les erreurs renvoyées :

    error C2660: 'SetTimer'*: la fonction ne prend pas 3 arguments
    'MessageBoxA'*: la fonction ne prend pas 1 arguments
    ...
    Peux-tu détaillé ton code ?

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Tu n'utilises pas les MFC j'imagine ...

    tu as une interface graphique ? Pourquoi utiliser une messageBox alors que cela bloque tout ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Ah oui excuse moi... je t'ai passé la solution pour une application type dialog. Sous SDI et MDI, j'ai réussi en mettant ces fonctions membres de la classe de vue View

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par nico-pyright(c)
    Tu n'utilises pas les MFC j'imagine ...

    tu as une interface graphique ?
    Oui, mais je souhaite pas l'utiliser... Je nai peut-être pas utilisé le bon type de projet...

    Pourquoi utiliser une messageBox alors que cela bloque tout ?
    la messageBox n'est pas vraiment bloquante dans mon cas, celle-ci me sert uniquement de test pour voir comment mon timer fonctione...

    En faite le programme que je veux faire est un peu plus compliqué... Je souhaite faire une scrutation d'une pin de mon port (16 entrées TTL) toutes les 4 sec puis suivant l'état de cette pin 0 ou 5V Affiché un Message d'avertissement à l'utilisateur...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 101
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Nicolas69
    Ah oui excuse moi... je t'ai passé la solution pour une application type dialog. Sous SDI et MDI, j'ai réussi en mettant ces fonctions membres de la classe de vue View
    Merci sa marche nickel !!

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 28/04/2005, 15h36
  2. [Débutant]Problème avec les timers
    Par mickael777 dans le forum MFC
    Réponses: 1
    Dernier message: 11/04/2005, 11h00
  3. [Débutant]Utilisation de swing
    Par OtI$ dans le forum Débuter
    Réponses: 10
    Dernier message: 01/12/2004, 21h27
  4. [Débutant] Utilisation du mot clé ASSERT
    Par analysiz dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/07/2004, 11h43
  5. [Débutant] Utilisation de FOP - Register Fonts with FOP
    Par Johnbob dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 31/01/2004, 00h27

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