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+ avec C & C++ Discussion :

Stopper le programme - boite de dialog erreur


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut Stopper le programme - boite de dialog erreur
    Bonjour,

    Existe t'il une méthode pour stopper un programme lors de l'affichage d'une boite de dialogue avec un message d'erreur par exemple ?
    Ensuite en fermant cette boite de dialogue le programme continue...

    Merci beaucoup pour votre aide

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Ca dépend. (j'aime bien ce genre de réponse . )

    Plus sérieusement tu peux rendre ta fenêtre de dialogue modale. C'est à dire qu'elle vient par dessus toutes les autres et tant qu'elle n'est pas fermée il est impossible d'accéder aux autres fenêtres de la même application.

    Quand j'écris que ca dépend c'est pour mettre un bémol sur les mots "stopper un programme". Si par exemple ton application a lancé des threads, ils continueront de tourner lors de l'affichage de la fenêtre de dialogue.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Et c'est justement ce dernier point que je souhaiterais aborder.
    Exemple tout con, pour tester les choses j'ai fais une boucle toute bête i++ pendant laquelle s'ouvre la boite de dialogue.

    Bien j'aimerais que la boucle stoppe lors de l'affichage de la boite de dialogue.

    Le fait que les autres fenêtres soient inutilisables est très intéressant aussi, je vais m'en servir. Mais le top c'est de dire au programme en C qui calcule derrière "toi tu t'arrêtes fissa et tu reprends quand je te le dis"

    J'avais pensé à coupler lors de l'affichage de la fenêtre un petit getchar(); ....

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Le problème est que ton programme tourne dans une boucle Gtk principale. Toutes les fenêtres secondaires ouvertes font parties de la même boucle.
    A priori je déclarerai un drapeau qui mis à FALSE laisserai tourner les boucles internes et à TRUE les arrêterai. Ca veut dire aussi que les boucles doivent intégrer le test de l'état du drapeau. C'est peut être un peu lourd.

    Autre manière de faire serait d'utiliser les threads avec les mutex. Mais il faut bien penser son code avant de se lancer là dedans.

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Peut être une autre solution. Lancer une deuxieme boucle gtk_main(); indépendante de l'interface principale dans laquelle est exécutée la fenêtre de dialogue.

    Pendant ce temps on peut bloquer la première boucle gtk avec la fonction gboolean gtk_main_iteration_do (gboolean blocking);.

    A tester...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Bon merci beaucoup pour ton aide. Je vois que le problème est bien plus épineux que prévu
    La partie code en C est vraiment trop imposante pour que je puisse me permettre de le modifier trop profondément. Je cherchais une solution simple qui me permette de le stopper, mais si c'est impossible sans grosses manips, tant pis

    Merci beaucoup encore Gerald

Discussions similaires

  1. Erreur lors de l'ouverture d'une boite de dialog
    Par kitue dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/11/2009, 15h51
  2. Gestion d'erreur -> Stopper le programme
    Par snoopy69 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/03/2009, 11h28
  3. problème avec la boite de dialog d'impression
    Par hrp dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/01/2005, 16h30
  4. [mfc] affichage dans une boite de dialog
    Par chronos dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 15h12
  5. Difference entre fenetre et boite de dialog
    Par billyboy dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2003, 15h43

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