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 :

GnomeApplet - GTK - multithread


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut GnomeApplet - GTK - multithread
    Bonjour à tous,

    Le C n'est pas mon terrain de jeu préféré et je viens de découvrir
    GTK il y a environ 2 semaines. Mon objectif primaire était de développer
    un applet gnome capable de monitorer et de changer la frequence de ma
    carte graphique(à cause des problèmes de drivers...). Comme ça avait l'air
    un peu complexe j'ai d'abord commencé par réécrire une version "LIGHT" du
    célèbre applet cpufreq qui aurait pour but de monitorer mon cpu...


    Pendant toute la période de développement j'ai lancé mon applet
    en mode "debugg" c'est à dire que je lance l'applet en ligne de commande
    puis je l'ajoute au panel et LA le programme se lance réellement et je
    peux voir tous mes petits printf de debug.

    J'ai donc un truc très classique qui affiche une icone cpu et un
    label tous deux rafraichis dynamiquement. Pour se faire, à la fin de ma
    fonction d'initialisation je lance un thread qui boucle et met à jour ces
    2 élément (change l'icone, modifie la couleur du label...)


    ET TOUT FONCTIONNE A MERVEILLE !!!!!!!!!!!!!!!!


    Seulement au moment où je décide de lancer mon applet en mode
    classique (en l'ajoutant directement au panel et sans le lancer au
    préalable en ligne de commande) : CA FREEEEEZZZZZZZ
    (ça plante au moment d'un set_image_from_file(), l'icone disparait
    et l'applet freeze, obligé de le killer)

    => Evidemment pour debugger j'ai du rediriger la sortie standard vers
    un fichier... et après avoir fouiller pendant des heures je m'aperçois
    qu'en mettant un sleep(5) juste avant que le thread ne commence son
    travail tout fonctionne !!!

    => 1ere conclusion : mon set_image_from_file() est effectué trop tôt?
    Donc je met un set_image_from_file() avant même de lancer mon thread
    (donc vers la fin de ma fonction d'initialisation) et LA, ça ne plante
    pas !!!

    => 2eme conclusion : Rien à voi avec ma première conclusion
    --> le multithread en GTK ça doit pas fonctionner comme ça
    J'ai essayer de me binder sur un signal pour retarder le lancement du thread
    mais après une 20aine d'essais j'ai abandonner... J'ai aussi entendu parler
    d'un gtk_main_iteration (), mais je n'ai pas vraiment saisis son fonctionnement.
    De plus dans le cas de mon applet je n'ai pas de fonction main.


    C'est pourquoi je m'en remets à vous car je commence à être à cours d'idées.




    Dans le cas où une solution serait apportée, j'aimerai quand même savoir
    pourquoi quand je lance cet applet en ligne de commande ça fonctionne!!
    Et pourquoi avec un malheureux sleep de 5 ça fonctionne aussi ??


    Voici mon archive : http://membres.lycos.fr/poumpoumk/cp...pufreqp.tar.gz
    (ce n'est qu'à l'état de test pour le moment, ne faites pas attention
    au printf de debug horribles que je viens de rajouter lol)

    Le fichier principal est cpufreq.c.
    Pour l'installer make, make install(en root)...
    Et pour profiter du changement de gouverneur il faut faire un visudo
    et autoriser l'exécution du script /etc/scripts/cpufreq.sh


    MERCI d'avance à tous ceux qui pourront m'aider.

  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
    Tu parles de threads, dans ces cas là, la lecture assidue de http://library.gnome.org/devel/gdk/s...k-Threads.html est obligatoire. Le plus simple (en règle général), c'est de faire tous les appels à des fonctions gtk+ depuis un même thread, et d'utiliser (par exemple) g_idle_add pour faire passer des informations d'un thread à un autre.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut
    Merci pour le lien

    Pour mon problème, j'ai effectivement opté pour la solution"1 seul thread modifie l'interface graphique" et j'utilise donc processus et signaux afin d'avertir le processus principal qui se charge de TOUTE la partie GTK.

    Dès que j'ai fini, je poste mon applet, si ça en intéresse certain...


    ++

Discussions similaires

  1. gtk+ + multithread (en C) (win_32)
    Par Heero Yui dans le forum GTK+
    Réponses: 3
    Dernier message: 30/12/2007, 16h24
  2. [GTK]instal devPack avec dev c++
    Par FreshVic dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 15/04/2003, 16h48
  3. [Kylix] Kylix GTK et QT
    Par mailstef dans le forum EDI
    Réponses: 2
    Dernier message: 19/11/2002, 21h53
  4. [GTK]PB Librairie GTK+ sous dev-c++
    Par wozzy dans le forum Dev-C++
    Réponses: 15
    Dernier message: 05/11/2002, 14h55
  5. Multithreading sous HP Ux 11
    Par pykoon dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 18/10/2002, 23h36

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