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 :

Actualisation d'un GtkTextView pendant calcul


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut Actualisation d'un GtkTextView pendant calcul
    Bonjour, je viens vous voir pour une petite question.

    Dans mon programme j'ai une fonction : log_message("Blablabla") qui va insérer du texte dans un GtkTextView. Cette fonction est appelée avant un calcul, cependant le GtkTextView ne sera mis à jour qu'une fois le calcul fini (alors que d'éventuels fprintf situés dans la fonction log_message s'affiche bien en temps réel dans ma console [je suis sous GNU/Linux]).
    Je pense qu'il faudrait faire du multithread, mais j'ai lu que le multithread et GTK+ n'étaient pas très amis ... Pourriez vous m'aiguiller sur la méthode à suivre ?
    Je tiens à préciser que je n'ai encore jamais utilisé du multithreading (il n'est jamais trop tard me direz-vous).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    log_message("Blablabla");
    /* Calcul */
    ......
    log_message("Fin");
    /* Blablabla et Fin s'affiche en même temps et à la fin du calcul */

  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 : 54
    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
    Tu peux forcer une mise à jour d'un widget en utilisant la fonction gtk_widget_queue_draw(); ou bien plus simplement gtk_widget_show_all();. Tu peux aussi insérer une boucle d'attente tant que les demandes de rafraîchissement de l'interface ne sont pas toutes réalisées avant tout calcul long qui pourrait bloquer l'affichage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (gtk_events_pending ())
      gtk_main_iteration ();
    Le multithreading pose en effet quelques problèmes pour ce qui est du gel de l'interface Gtk+. La solution est d'insérer ta fonction dans la boucle générale de Gtk+ en utilisant la fonction g_timeout_add(); (ou ses dérivés). Ainsi dans la fonction insérée tu peux toujours interagir avec ton interface.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut
    Bonjour bonjour !!! Merci pour ces indications.

    J'ai l'impression que je vais pouvoir faire des choses avec. Un grand merci .

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut
    Bonjour.
    En fait j'ai utilisé la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (gtk_events_pending ())
    		gtk_main_iteration_do (FALSE);
    Le problème c'est qu'il semble que ca produit des effets secondaires gênants comme appeler la même fonction plusieurs fois simultanément ....
    On va dire que c'est un peu dommageable .

    Auriez-vous une idée ? Sachant que gtk_widget_queue_draw ou autre ne me donne pas satisfaction :/.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut
    Je me réponds tout seul

    Je pense avoir trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void
    gdk_window_process_all_updates (void);
    qui pourrait faire ce que je veux .

Discussions similaires

  1. [XL-2003] progressbar pendant calcul
    Par yvespi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2010, 13h20
  2. [PPT-2003] progress bar pendant calcul
    Par yvespi dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 06/07/2010, 10h15
  3. thread pour affichage pendant calcul
    Par xasmxasm dans le forum C++Builder
    Réponses: 1
    Dernier message: 06/06/2008, 23h02
  4. Fenetre de prgression pendant un calcul
    Par Drizzt [Drone38] dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 15h21
  5. Conserver l'affichage pendant les calculs ?
    Par ceugniet dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/03/2004, 12h19

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