begin process at 2012 05 29 07:33:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

GTK+ interface graphique geler


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

GTK+ interface graphique geler

samedi 9 février 2008 à 21:30:53 | GTK+ interface graphique geler

Raf15

Bonjour à tous,
Voila j'ecris un programme en c (debutant) avec la bibliothèque GTK+ pour creer une interface graphique.
Je voudrais changer en temps reel le texte d'un label seulement mon interface graphique reste geler et ce jusqu'a la fin du traitement. D'après mes recherche c'est normal mais je ne ccomprend pas comment  remedier...

merci de me repondre
dimanche 10 février 2008 à 00:27:29 | Re : GTK+ interface graphique geler

gamemonde

Membre Club
simple utilise un thread
dimanche 10 février 2008 à 16:32:40 | Re : GTK+ interface graphique geler

Raf15

Yes, merci t'avais raison avec un thread ca fonctionne. Seulement il ya juste un petit soucis, le label s'affiche que si je bouge la souris (si je ne touche pas la souris le label ne s'affiche pas). Je trouve ca bizzar... Si t'as une idée de ce sui peut ce passer fait le moi savoir parce que moi je nage un peu...(je débute en prog).
dimanche 10 février 2008 à 17:45:24 | Re : GTK+ interface graphique geler

luhtor

Tu utilises bien un système d'évément pour mettre a jour le label ? Tu modifies pas le label depuis ton thread quand meme ?
dimanche 10 février 2008 à 17:49:39 | Re : GTK+ interface graphique geler

Raf15

... ...ben...en fait...si...
Un systeme d'evenement?
Je ne vois pas très bien...
Pourrais tu m'expliquer? dsl mais je débute et j'essaye d'apprendre petit à petit
dimanche 10 février 2008 à 19:29:33 | Re : GTK+ interface graphique geler

luhtor

Aucune librairie de GUI n'est thread safe, c'est à dire que des que tu créés un thread, il est ABSOLUMENT interdit pour lui d'appeler des fonctions de la gui. En fait, gtk dispose de fonctions pour permettre ce genre de chose, mais c'est très délicat à utiliser (gtk_thread_enter/gtk_thread_leave (de mémoire)).

En règle général, des que tu veux modifier la gui, il faut stocker dans une variable protégée (cad protégé par un mutex dans ton cas pour éviter à un thread de lire la variable pdt alors qu'elle est en cours de modification par un autre thread). Ensuite, la gui vient périodiquement (avec un timer) lire le contenu de la variable pour se mettre à jour si nécessaire. Donc ca, c'est la méthode artisanale qui fonctionne à coup sur.

Normalement, le librairie te fournit des systèmes d'événements asynchrones. Dans ton thread tu envois un événement (avec une méthode push_event, je connais pas la fonction sous gtk, mais il doit y avoir l'équivalent) contenant les données pour mettre à jour ton label. L'intéret c'est que la GUI sait que cet événement provient d'un thread. Donc elle le stocke et le traite dès que possible dans le thread principal.

Mais j'ai jeté un rapide coup d'oeil sur la doc de gtk, c'est un peu le bordel (il semblerait) donc la méthode artisanale me semble la plus pratique pour toi. Il faudrait passer du temps sur la doc de gtk, mais si tu débutes, tu seras plus perdu qu'autre chose.
Donc tu créés une chaine de caractère et un mutex (http://library.gnome.org/devel/glib/stable/glib-Threads.html). Si tu sais pas ce que c'est => google.

Mais attention, tu te lances dans des trucs un peu technique. La pente risque d'etre un peu raide au début mais après t'arrives sur la plaine.

La doc intégrale de gtk/glib... à mettre en FAVORIS:
http://library.gnome.org/devel/references
dimanche 10 février 2008 à 22:01:14 | Re : GTK+ interface graphique geler

Raf15

Et ben...Je viens de passer une heure et demi a chercher sur le net des explication sur tout ca mais ca reste toujours aussi obscure...pourquoi être obliger de proteger une variable si tu ne fais que la lire (par le thread gerant la gui)? et...................bref je pipe rien...

En tout cas petite explication du programme: il s'agit d'un chronometre. Deux voiture miniature envoie une trame chacun sur le port RS232, le programme doit reconnaitre ces trames et lancer un chrono dès la reception... En console pas trop de soucis mais pour l'interface graphique c'est une autre paire de manche...Mon soucis étant l'affichage des temps a chaque tour de voiture en temps reel. donc en ce moment j'en suis là : je lance le thread avec le label passer en parametre.

Une fois la trame recu modification de la chaine que le label contient puis mis a jour du label par un
gtk_label_set_text(GTK_LABEL(pTempLabel), tps_res);

Voila si quelqu'un peux m'éclairer, ce serait sympas...pour le mutex etc... je regarderais demain parce que là ca commence a me fatigué (moi qui penser etre arriver au bout du prog...)

En tout cas merci bcp luhtor de m'avoir accorder un peu de ton tps

dimanche 10 février 2008 à 22:11:00 | Re : GTK+ interface graphique geler

gamemonde

Membre Club
je comprend ton probleme mais bon defois soit le faire en mfc ou en api est plus simple surtout quand on est debutant

en api simple tu créer reelement un thread qui va verifier ta donnée pas besoin de passer par un mutex juste faire des validations

surtout plus faicile si tu ne fais qu'affiché des infos
dimanche 10 février 2008 à 22:39:31 | Re : GTK+ interface graphique geler

luhtor

"pourquoi être obliger de proteger une variable si tu ne fais que la lire (par le thread gerant la gui)"
=> Car la prog multithreadé, c'est délicat. Si tu comprends pas pourquoi, admets le :) Mais c'est facile de trouver un exemple:

Imagines une chaine de caractère avec un 0 terminal, le thread écrivain efface momentanément ce 0 pour par exemple, rallonger la chaine. Mais Windows l'interrompt avant qu'il est totalement fini. Bref, la chaine ne possède plus de 0 terminal or le thread de lecture passe par la et souhaite lire le contenu, et la, tu imagines la suite. Il va lire la chaine, plus plein de merde jusqu'à trouver un 0 en mémoire. Windows interrompt ce thread puis rend la mains au thread écrivain qui finit son boulot. Conclusion de l'histoire, ton thread lecteur a lu n'importe quoi.

Lecon => empecher le thread de lecture d'accéder a la variable tant que le thread écrivain a pas terminé => créer un mutex.
dimanche 10 février 2008 à 23:24:07 | Re : GTK+ interface graphique geler

gamemonde

Membre Club
pas necessairement on peux empecher le thread de lecture et vice-versa de fonctionner si lautre est activé en utilisant les fonctions prevu a cette effet.

je comprend tres bien les programme multithreader mais j'utilise pas necessairement de mutex pour le faire j'utilise juste d'autre moyen

1 2

Cette discussion est classée dans : graphique, gtk, interface, geler


Répondre à ce message

Sujets en rapport avec ce message

HELP GTK - exe portable [ par UnderFlow ] Bonjour à toutes et à tous, Afin de développer très rapidement une interface graphique en C++, j'ai utilisé Glade (éditeur graphique) et GTK (bibliot interface graphique C [ par chiro2000 ] Bonjour a tous Je suis actuellement entrain de faire de la migration d un logiciel qui est fait en C avec une interface DOS en Windows et linux; pour interface graphique C [ par chiro2000 ] Bonjour a tous je dispose d un code source qui entierement fait en C (sans classe ) contient que des structures; j aimerai savoir si il est possible d [DOS] Interface graphique pour application [ par cccomputer ] Bonjour, Je souhaite savoir s'il est possible de créer une application sous dos avec une interface graphique (8 ou 16 bits) qui gère la suppression d interface graphique d'une calculatrice sr matlab [ par medbek ] je veus faire une interface graphique avec matlab .est ce que vous pouvons me aider commnent le faire et quel est sa algorithme? interface graphique c [ par marwa77 ] bonjour, je suis entrain de réaliser mon projet c sous linux. j'aime bien savoir est ce-que je peux réaliser une interface graphique sous unix en c où interface graphique avec C++ [ par davidsanton ] salut je veux créer une interface graphique user mais je sais pas comment je vé la lier avec swi prolog car mes donner seront dans swi polog min-projet [ par ghaziguesmi ] En fait, ce min-projet pour Windows uniquement (min-projet de fin d'étude). Merci, mais votre aide, je vois que avant de commence le min-projet, il fa interface graphique [ par foollefille ] Bonjour, Je suis à la recherche d'un code qui me permet de tracer une fonction sinus en C++ ou bien .net je compte sur vous merci d'avance pour votr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales