Lancer un thread

Signaler
Messages postés
100
Date d'inscription
lundi 30 octobre 2006
Statut
Membre
Dernière intervention
14 avril 2009
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
Bonjour,

J'ai une interface graphique en gtk. Lorsque je click sur un bouton, ca lance la fonction void fonction(); au debut de cette fonction je cree un thread qui va afficher du texte dans un entry. Le thread est cree avec
g_thread_create(mon_thread,NULL,FALSE,&error)
dans void fonction() j'ai donc en tout debut cette instruction puis des sleep.
Le probleme est que le thread ne se lance qu'a la fin de la fonction alors qu'elle devrait se lance au debut :/
par exemple :

void fonction(){

//declaration des variables

g_thread_create(send_thread,NULL,FALSE,&error);

//instruction 1

//sleep(5000);

//instruction 2
}

Le thread affiche en continue dans une entry du texte. Logiquement lorsque j'appelle la fonction void fonction, ca devrait commencer a afficher du texte dans l'entry puis passer a l'instruction 1, attendre 5s et executer l'instruction 2. Mais lorsque je lance fonction, ca attend 5s avant de commencer a afficher du texte dans l'entry donc j'en conclu que le thread ne se lance qu'a la fin de la fonction ?

Si quelqu'un sait comment regler ce probleme et lancer le thread en debut de fonction ...

Merci

3 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Tu n'as pas le droit d'agir sur la GUI à partir d'un thread sauf en utilisant les fonctions g_thread_enter_ et g_thread_leave ou un truc comme ca. Bref c'est le merdier, donc jamais utiliser de thread pour écrire dans une text entry.

Pour ton pb, le thread devrait se lancer immédiatement:
http://developer.gnome.org/doc/API/2.0/glib/glib-Threads.html#g-thread-create
Messages postés
100
Date d'inscription
lundi 30 octobre 2006
Statut
Membre
Dernière intervention
14 avril 2009

oui dans ma fonction send_thread(), les gtk_entry_set_text sont encadres par gdk_threads_enter(); et gdk_flush (); / gdk_threads_leave();

bah en meme temps je vois pas d'autre solution pour afficher du texte en temps reel dans le gtk_entry sinon ....
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Remarque, ya longtemps que j'ai pas fais de gtk, mais doit surement y avoir l'équivalent des "posted events" qu'on trouve en Qt ou wxWidget. Ces events font le lien entre des threads et le thread principal.