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 * thread = Encore des problèmes


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut GTK * thread = Encore des problèmes
    Bonjour, c'est encore moi.

    j'ai toujours un problème de threads. Je m'explique :

    Le main gère l'affichage (gtk+) la mise à jour de l'affichage ce fait grâce à une fonction appelée lorsque les autres ne font rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_idle_add((GSourceFunc)recup_action,(void*)data_to_recup);
    le second (recup_CSV de son petit nom) lit des données et les mets dans une pile qui est lu par recup_action (précédemment cité). il est composé d'une boucle while 1. Pour donner la main à "recup_action" j'ai essayé et sans succès.

    si quelqu'un à une idée.

    si vous avez des questions n'hesitai pas.

    Merci, bonne journée

    Philippe

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    T'as mis un g_print au tout début de recup_action pour t'assurer qu'elle est appelée ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut
    Oui il y a un printf ("")

    Mais la fonction n'est jamais appelée car le thread n'est jamais "inactif". Je recherche une solution pour "l'endormir". De manière à ce que recup_action puisse se lancer.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Si tu supprimes ton thread, ta méthode est appelée ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut
    oui ... et elle marche bien en plus

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Le msleep devrait largement suffire à mon avis, c'est bizarre..

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut
    aïe aïe aïe

    ça part mal. Je vais continué à gratter, si je trouve la solution je la poste et si quelqu'un à une idée je prends.

    Merci de ton aide...

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Sans code c'est pas super évident de deviner ce qui peut mal se passer... A mon avis, le g_idle_add n'est pas appelé (ou reste bloqué) pour d'autres raisons que ce que tu penses.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut
    Encore un indice si ça peut aider.

    Si je ne mets pas de while1 sur le thread, à la fin de celui-ci la fonction "recup_action" ce lance normalement.

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    T'es sûr que ta boucle infinie tourne dans ton thread ? Ca donne l'impression que le thread qui fait tourner la main loop gtk+ est bloqué

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut
    exacte ...

    Dans mon programme la guerre pour savoir qu'elle thread aura le mutex ce fait entre ma fonction de rafraichissement et le thread de remplissage de la pile. Le gtk_main n'est pas dans la partie.

    je vais donc enlever le while1 du thread et je le lancerais avec un cond wait. Le signal cond sera envoyé à la fin de chaque rafraichissement. Je pense que ça devrait marcher... je vais essayer ça. Je te tiens au courant.

    Merci

  12. #12
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Si ta fonction de rafraichissement, c'est le callback du g_idle_add, c'est une fonction qui est appelée de manière synchrone par gtk_main. Donc il est bel et bien dans la partie Si ta fonction de rafraichissement bloque, la boucle principale de gtk+ sera bloquée aussi.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut
    Le problème n'est toujours pas résolu. Mais je pense que je vais complètement changer mon architecture. Je vais utiliser "piles standard" pour passer mes informations, ainsi je n'aurais pas à gérer la synchronisation et m'occuper des mutex.

    Merci pour ton aide

    salutation

  14. #14
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Avec une GAsyncQueue, t'aurais probablement pas grand chose à faire pour gérer la transmission de données entre les 2 threads... Si tu utilises une "pile standard" entre 2 threads, il y a de bonnes chances qu'il faille protéger les accés concurrents avec un mutex.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Par défaut
    merci pour ton conseil. Je vais utiliser ça alors.

    J'espère que ça tournera

    Bonne journée.

    Salutation

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

Discussions similaires

  1. Encore des problèmes avec le BDE
    Par Flint dans le forum C++Builder
    Réponses: 19
    Dernier message: 31/12/2007, 23h26
  2. Encore des problèmes de tailles de div liées
    Par gibet_b dans le forum Mise en page CSS
    Réponses: 14
    Dernier message: 04/07/2007, 08h46
  3. Réponses: 4
    Dernier message: 05/10/2006, 13h10
  4. Encore des problèmes de variables
    Par mat99 dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2005, 10h26
  5. Réponses: 8
    Dernier message: 10/08/2004, 11h49

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