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

Visual C++ Discussion :

Impl�mentation d'un bouton "Annuler" pour interrompre un calcul en cours


Sujet :

Visual C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par d�faut Impl�mentation d'un bouton "Annuler" pour interrompre un calcul en cours
    Bonjour � tous,

    Je suis nouveau sur ce site, o� je trouve beaucoup d'informations me permettant d'avancer dans mon travail. Merci pour cel�.

    Je developpe des applications math�tiques dans le domaine de la biologie, et je travaillais en Fortran (non, ne huez pas, c'est tr�s pratique) jusque r�cemment, o� j'ai d�cid� de passer en visual C++ pour impl�menter des GUI.

    J'en viens donc � mon probl�me.

    1- j'ai d�velopp� en C++ un code pour effectuer un calcul;

    2- afin de pouvoir lancer ce calcul � partir d'une interface graphique permettant de param�trer le mod�le math�matique, j'ai impl�menter ce code dans une application Forms: concr�tement, j'ai commenc� par cr�er une Form, puis un bouton "Calcul", qui lance evidemment mon calcul;

    3- ce calcul est constitu� principalement d'une boucle, et dans certain cas, il faut beaucoup de temps pour l'achever (r�solution d'equations diff�rentielles partielles).

    Impl�ment� avec mon bouton "Calcul", cel� donne en r�sum� �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    {
     
    for (int j=0;j<Ntime;j++)
    {
    'CALCUL'
    }
    }

    4- J'en viens � ma question. Je voudrai impl�menter un bouton "Annuler", qui puisse apr�s un click arr�ter le calcul en cours, c'est � dire sortir de ma boucle. J'ai donc essayer ceci:

    * d�claration d'un bool�en qui est �gal � true si je clique sur "Annuler"



    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    bool Annul;
     
    private: System::Void Annuler_Click(System::Object *  sender, System::EventArgs *  e)
    		 {		
    			 Annul=true;
    		 }
    * sortie conditionnelle de ma boucle

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    {
     
    for (int j=0;j<Ntime;j++)
    {
    	if (Annul!=true)
    	{
    		break;
    	}
     
    'CALCUL'
    }
    }
    Bien evidemment, �a ne fonctionne pas, premi�rement car je ne peux pas cliquer sur mon bouton "Annuler" pendant le calcul d�clench� en cliquant sur le bouton "Calcul", et deuxi�mement car je pense que cette approche n'est pas bonne, sans savoir y rem�dier avec mes faibles connaissances du Visual C++.

    Est ce que quelqu'un pourrait m'aider pour ce probl�me?

    Bien conscient que c'est une question de base et de "rookie", j'esp�re que mon explication est claire et que la question m�rite un int�r�t.

    Merci d'avance.

    MR

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    Bonjour

    Je sais juste qu'il faut dans ta fonction calcul vider la pompe a message pour que l'appuie sur ton bouton soit prie en compte pendant l'execution de ton calcul.
    Malheureusement je ne peux pas te donner le code en visual C++.

    Cordialement

  3. #3
    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
    Par d�faut
    je pense � mon humble avis qu'il faut plutot faire ton calcul dans un thread pour �viter de bloquer la gui.
    Ensuite depuis ton bouton annuler, arreter le thread

    tu devrais regarder du cot� de la faq c++/cli, http://dotnet.developpez.com/faq/cpp...Multithreading
    Voir aussi les cours langage C et les cours pour apprendre C++.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par d�faut
    Rebonjour

    Merci de vos r�ponses rapides.

    Je vais prendre en compte vos conseils, et lire la Faq sur les Threads. Je suis pass� � c�t� , mais je crois que c'est exactement ce qu'il me faut.

    Merci beaucoup.

  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
    Par d�faut
    tiens, parce que je suis cool je t'ai fait une d�mo, qui fait aussi une mise � jour GUI depuis le thread
    Fichiers attach�s Fichiers attach�s

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par d�faut
    Bonjour,

    Merci beaucoup Nico pour ta demo et ton tuto (et tes tutos, car les autres m'ont �galement aid� pour d�marrer).

    C'est exactement ce qu'il me fallait, et je pense que �a devrait aussi r�soudre mon second probl�me qui �tait: le calcul �tait beaucoup plus lent depuis que j'avais impl�menter le code de calcul sur mon bouton "Ok" (par rapport au calcul effectu� sur la console). Et �a devrait aussi me permettre d'am�liorer les fonctionnalit�s de ma GUI.

    Merci beaucoup pour cette aide, et pour l'accueil, et j'esp�re pouvoir un jour aider � mon tour, quand j'aurai surmont� l'apprentissage du Visual C++ (le passage de Fortran � C++ a d�j� �t� un peu compliqu� pour le changement de logique, et le passage en Visual encore plus, mais d'ici 1 an, �a devrait aller )

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