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

C++/CLI Discussion :

arrêter une boucle infinie avec DoEvents


Sujet :

C++/CLI

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut arrêter une boucle infinie avec DoEvents
    J'ai un problème avec le DoEvents();
    j'ai un bouton mesurer qui m'affiche des valeurs random lorsque je clique dessus et un bouton arrêter qui stop l'affichage.
    mon problème est qu'il faut que je clique deux fois sur le bouton ou bien je clique quelque part dans le form puis je clique sur le bouton pour que l'affichage s'arrête
    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
     
    private: System::Void buttonMesurer_Click(System::Object^  sender, System::EventArgs^  e) {
     
    this->stop = false;
     
    while(!stop)
    {
    	Sleep(100);
    	Random ^rnd = gcnew Random();
            int  mesure = rnd->Next(100);//(dblValue*ratioValue);
    	 this->textBoxMesure->Text=mesure.ToString();
    	// this->Update();
    	 System::Windows::Forms::Application::DoEvents();		
    }
    }
     
    private: System::Void buttonArreter_Click(System::Object^  sender, System::EventArgs^  e) {
    			 this->stop = true;
    			 //this->Update();
    		 }
    Merci d'avance

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Cachez ce code que je ne saurais voir.
    OK, je suis pas Molière.

    Vous ne faite pas un boucle infinie avec un appel à un dispatcher au milieu (c'est ce DoEvents). BEURRKK BEURRKK BEURRKKKKKK.

    Bon, reprenons les bases.

    Donc pas de boucle, vous créez un thread dédié qui se chargera de tirer les valeurs aléatoires et de les dispatcher à votre thread d'IHM.

    Form.Invoke pour le passage d'un thread de travail au thread ayant créé une From.
    http://msdn.microsoft.com/en-us/libr...rm.invoke.aspx

    En fait, moi, je me serais pas fait chi**, j'aurais déclenché un timer de formulaire.
    http://msdn.microsoft.com/en-us/libr...rms.timer.aspx
    Et le timer n'a qu'à appeler une simple méthode qui sera automatiquement exécuté dans le thread d'IHM.

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Merci pour la réponse,
    Mais je crois que je ne peut pas utiliser un Timer car je ne sais pas combien de temps je veux exécuter le processus.
    Juste une remarque: même avec le timer il y a un DoEvents
    Alors comment je peux utiliser ce doevent???
    Pour le Threading je vais voir mais si j'arrête le thread il se peut qu'il soit utilisé de nouveau dans un autre traitement (or il est tué) et comme ça il y aura des craves conséquences.
    Merci d'avance

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Lachez ce puta** de "DoEvents".

    On va faire dans le simple.

    Mais je crois que je ne peut pas utiliser un Timer car je ne sais pas combien de temps je veux exécuter le processus.
    Un timer, ça se crèe avec un constructeur (http://msdn.microsoft.com/en-us/library/e5e9tsdt.aspx), cela ce démarre avec la méthode Start (http://msdn.microsoft.com/en-us/libr...mer.start.aspx), ça s'arrête avec la méthode Stop (http://msdn.microsoft.com/en-us/libr...imer.stop.aspx), et cela se libère avec la méthode Dispose (http://msdn.microsoft.com/en-us/library/3cc9y48w.aspx).

    Si vous enlevez toute cette cochonner** qui est dans votre méthode "buttonMesurer_Click" pour n'y instancier qu'un Timer, mettre dans son Event Tick (http://msdn.microsoft.com/en-us/libr...imer.tick.aspx) votre méthode qui génère un nombre et qui modifie la valeur d'une propriété Text, mais surtout pas ce puta** de "DoEvents", configurer sa propriété Interval et appeler sa méthode Start.
    Et si dans votre méthode "buttonArreter_Click", vous stoppez le timer avec un appel à sa méthode Stop et à sa méthode Dispose.

    Où sera le lézard (le problème)?

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Lachez ce puta** de "DoEvents".
    même avec le timer il y a un DoEvents (L'exemple de msdn)
    Pourquoi vous détestez ce DoEvents, est-il d'autant mauvais????
    Je veux juste une explication.
    Je vais voir le Timer mais j'ai un problème dans la configuration de l'interval car je ne sais pas vraiment quelle est la durée de cet interval?
    Merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    même avec le timer il y a un DoEvents (L'exemple de msdn)
    Heu, vous avez bien vu où est le DoEvents dans l'ensemble de MSDN.

    Dans le Main, le seul et unique endroit où il doit être et normalement, c'est même pas vous qui l'y mettez, mais le wizard de création de projet WinForm de VS.

    Pourquoi vous détestez ce DoEvents, est-il d'autant mauvais????
    Je déteste ce DoEvents car il n'a rien à faire là.
    LISEZ LA DOC, surtout le passage "Caution" :
    http://msdn.microsoft.com/en-us/libr....doevents.aspx

    Vous êtes comme un enfant de 5 ans qui a trouvé une grenade à main d'il y a 70 ans et qui l'agite comme un hochet.

    Je veux juste une explication.
    RTFM

    j'ai un problème dans la configuration de l'interval
    Sleep(100) -> attente de 100 * 10^-3 secondes.
    Bin en lisant la DOC, Interval = 100.

Discussions similaires

  1. Problème pour arréter une boucle avec un bouton
    Par Zizook dans le forum Tkinter
    Réponses: 17
    Dernier message: 17/03/2014, 13h26
  2. [QThread] Commencer avec QThread et une boucle infinie
    Par FoX_*D i E* dans le forum Multithreading
    Réponses: 1
    Dernier message: 18/02/2014, 23h24
  3. Arrêter une boucle infinie
    Par green_fr dans le forum Administration et Installation
    Réponses: 1
    Dernier message: 26/08/2008, 14h44
  4. probleme avec une boucle infinie
    Par hunter99 dans le forum C++
    Réponses: 3
    Dernier message: 26/12/2007, 23h37
  5. [FTP] comment corriger une boucle infinie ?
    Par sofybj dans le forum Langage
    Réponses: 8
    Dernier message: 08/11/2005, 14h49

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