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 :

gtk_main_quit() et après ?


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut gtk_main_quit() et après ?
    Bonjour à tous,

    J'ai une question à laquelle je ne trouve pas encore de réponse. Je me permets de la poser ici.

    J'ai une fonction callback qui capture un signal du type expose_event, une fois que la main loop est lancée par gtk_main(). Et je précise que gtk_main() n'est invoqué qu'une seule fois dans l'ensemble de mon code.

    Cette fonction callback fait plusieurs calculs qui peuvent aboutir à arrêter la main loop dans certaines situations.

    J'ai donc quelque part dans cette fonction callback des lignes de code du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (...)    {gtk_main_quit();}
    Il se trouve que, dans pas mal de cas, les calculs continuent en séquence tout de même. Comment est-ce possible ?

    Je peux trouve rajouter dans les parenthèses ci-dessus une instruction comme :
    Et dans ce cas mon code s'arrête évidement (ce qui prouve que je passe bien par ce bout de code conditionnel).

    Il reste que je ne comprends pas pourquoi les calculs continuent en séquence si la boucle principale de GTK est terminée.

    Quelqu'un aurait-il une explication ?

    Merci pour toute information sur ce point.

    Eric.

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    La boucle principale écoute des événements et lance les callbacks associés à ces évènements. Elle inclus aussi des fonctions qui peuvent être exécutées à intervalle régulier. Le problème de tout ce petit monde est que l’exécution est séquentielle. Donc toutes les fonctions exécutées sont bloquantes. Lorsque tu lances gtk_main_quit(); la boucle attend sûrement qu’une autre fonction se finisse avant de prendre en compte ta demande d’arrêt. Dans ce laps de temps ta fonction peut continuer à calculer.
    Essaye d’ajouter à la suite de gtk_main_quit(); un return; pour forcer la sortie de ta fonction.

  3. #3
    Membre régulier
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Bonjour.

    La boucle principale écoute des événements et lance les callbacks associés à ces évènements. Elle inclus aussi des fonctions qui peuvent être exécutées à intervalle régulier. Le problème de tout ce petit monde est que l’exécution est séquentielle. Donc toutes les fonctions exécutées sont bloquantes. Lorsque tu lances gtk_main_quit(); la boucle attend sûrement qu’une autre fonction se finisse avant de prendre en compte ta demande d’arrêt. Dans ce laps de temps ta fonction peut continuer à calculer.
    Essaye d’ajouter à la suite de gtk_main_quit(); un return; pour forcer la sortie de ta fonction.
    Merci Gerald,

    C'est là effectivement l'explication. J'ai effectivement un g_timeout_add() qui lance à interval régulier une autre fonction qui est sûrement en attente d'être finie. un return; ajouté après le gtk_main_quit() résoud tous mes problème !

    Merci ! Eric.

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

Discussions similaires

  1. action APRES chargement complet ...
    Par PinGuy dans le forum Delphi
    Réponses: 7
    Dernier message: 06/07/2006, 17h16
  2. extraire 2 chiffres après virgule ?
    Par nerick dans le forum C
    Réponses: 2
    Dernier message: 13/12/2002, 17h10
  3. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37
  4. [interbase]Se logger après une première installation
    Par Ultra-FX dans le forum InterBase
    Réponses: 3
    Dernier message: 13/09/2002, 11h44
  5. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11

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