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 :

GLib-WARNING **: g_main_context_prepare(): main loop already active in another thread


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut GLib-WARNING **: g_main_context_prepare(): main loop already active in another thread
    Bonjour,

    voilà une petite semaine que je me suis mis aux thread, et j' avoue patauger un peu..
    J' ai pas mal cherché sur le net, notamment sur l' utilisation des fonctions gtk_main_iteration et gtk_events_pending, sans trouver grand chose.

    Finalement je m' adresse ici en attendant d'y trouver des réponses et des remontrances constructives

    Le warning apparaît a chaque fois que je touche a l' interface.
    voici la fonction thread, pas encore terminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void *eycandy (void * arg)
    {
        while (globale.animations == 1)    // Si on est en mode animation on s'amuse, sinon le thread se suicide.
        {
            if (globale.lecture_pause == 1)    // Si on est en lecture on anime la lecture.
            {
                char tmp;
                tmp = globale.anime_radio [0];    // On retient le premier caractère.
     
                pthread_mutex_lock (&globale.mut);
                int a = 0;
                for (a = 0; globale.anime_radio [a+1] != '\0'; a++) 
                {
                    globale.anime_radio [a] = globale.anime_radio [a+1] ;    
                }
                pthread_mutex_unlock (&globale.mut);
     
                globale.anime_radio[a] = tmp;    // On place l'ancien premier caractère a la fin.
                gtk_label_set_label (GTK_LABEL (interface.label), globale.anime_radio);
                usleep (150000);
     
                while (gtk_events_pending ())
                       gtk_main_iteration ();
     
            }
     
            if (globale.lecture_pause == 0)    // Si on est en pause on anime la pause.
            {
     
     
            }
        } 
        pthread_exit (0);
    }
    Je ne suis pas sur d' utiliser les bonnes choses comme il faut.
    A la base je souhaite animer une petite interface : défilement du texte, clignotement des boutons.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Mon programme se bloque lorsque j'utilise les threads ?

    La boucle principale et les threads ne font pas bon ménage, tu doit exécuter gtk_main dans un premier thread et ton code ci-dessus dans un autre thread ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 81
    Par défaut
    Bonjour,

    Je viens de voir la fonction g_timeout_add qui paraît très bien.
    Mais je me pose des questions sur le fonctionnement.

    S' il ne s' agit que d'une fonction appelé par la boucle GTK, elle peut très bien en bloquer l' itération ?
    Si cette boucle comporte un sleep par exemple, ou carrément un scanf ?

Discussions similaires

  1. gobject main loop and sys.stdin.readline
    Par Invité dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 01/03/2012, 08h44
  2. RuntimeError: main thread is not in main loop
    Par bender86 dans le forum GTK+ avec Python
    Réponses: 0
    Dernier message: 30/07/2011, 12h21
  3. [warn] module jk_module is already loaded, skipping
    Par DevServlet dans le forum Apache
    Réponses: 4
    Dernier message: 02/02/2009, 17h09
  4. Transaction already active mais Entitymanager closed
    Par piotrr dans le forum Hibernate
    Réponses: 2
    Dernier message: 13/05/2008, 17h57
  5. integrer les messages des fenetres dans une main loop
    Par d'Oursse dans le forum Windows
    Réponses: 3
    Dernier message: 15/06/2007, 19h29

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