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

GTK+ Discussion :

interrompre une boucle via un bouton GTK


Sujet :

GTK+

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut interrompre une boucle via un bouton GTK
    Bonjour,
    Je cherche à exécuter une boucle while tant qu'un bouton "check" est actif dans ma fenêtre GTK. Le problème c'est que une fois le bouton que le bouton est coché, je perd la main sur mon programme et ne peux interrompre la boucle. Voici ma fonction qui est toute simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void OnEcoute(GtkWidget *pToggle, gpointer data)
    {
        while(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pToggle)))
        {
            debut++;
            printf("%d\n", debut);
        }
     
    }
    ps: je précise qu'avant d'écrire ce post j'ai cherché une solution sur différents forum ou tuto mais je n'ai pas trouver la réponse (ou je ne l'ai pas compris).

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    D'abord, j'ai envie de dire que la conception n'est pas bonne. Imagine que tes opérations s'exécutent en temps 0. Alors ta boucle a provoqué un dépassement de capacité et ton clic n'a pas de raison d'être.
    Tu n'as pas trouvé la bonne condition d'arrêt.


    Mais pour ne pas être excessivement rabat-joie, voici des codes à insérer à l'endroit trop long:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     while gtk.events_pending():
       gtk.main_iteration(False)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (Glib::MainContext::get_default()->iteration(false))
             ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while(Gtk::Main::events_pending())
            Gtk::Main::iteration();
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette réponse mais je n'ai absolument rien compris.
    Je précise que je programme en C (je me trompe peut-être mais j'ai l'impression que les lignes de code que tu m'as donné sont en C++).
    Enfin ne tiens pas compte de ce que fais la boucle while, c'est seulement un test de debug mais ma question porte plus sur le fait de pouvoir lancer et interrompre à tout moment cette boucle while en cliquant sur le bouton check de la fenêtre.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Mon but est seulement d'ouvrir des horizons. Tu aurais pu chercher l'équivalent en c.
    Le premier était python.

    En C, essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (gtk_events_pending ())
      gtk_main_iteration ();
    Étant entendu que tu as inclus ce qu'il fallait:
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    D'accord. Peux-tu m'expliquer le principe de fonctionnement de ces lignes de code et comment l'insérer dans ma fonction?

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Je l'ai écrit: Dans ton while.

    Il faut que le logiciel purge les messages en attente avant de continuer ton processus long.
    Si quelqu'un clique, ça crée un évènement. Qui s'empile. Il sera traité plus tard. Mais si tu fais un calcul qui prend 24h, il faut attendre 24h avant que ton clic soit traité. Avec le bout de code donné, il traite les messages (donc ton clic), puis reprend le calcul.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci je n'avais pas compris au début. Tout fonctionne niquel, merci pour tes réponses!

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

Discussions similaires

  1. Comment puis-je interrompre une boucle each ?
    Par bnohit dans le forum jQuery
    Réponses: 3
    Dernier message: 20/04/2011, 22h28
  2. interrompre une boucle sur erreur
    Par flyingfr53 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 28/01/2011, 13h15
  3. Ouvrir une fenêtre via un bouton
    Par asco5 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 05/08/2008, 00h07
  4. [Turbo Pascal] Interrompre une boucle infinie
    Par hallaj dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 22/07/2008, 18h32
  5. Réponses: 17
    Dernier message: 02/02/2006, 22h31

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