Lancer un thread

Yunchi Messages postés 100 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 14 avril 2009 - 2 août 2007 à 09:24
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 3 août 2007 à 16:16
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
2 août 2007 à 11:41
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
0
Yunchi Messages postés 100 Date d'inscription lundi 30 octobre 2006 Statut Membre Dernière intervention 14 avril 2009
3 août 2007 à 03:12
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 ....
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
3 août 2007 à 16:16
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.
0
Rejoignez-nous