Bonjour,
j'ai vu qu'il y avait plusieurs problèmes sur ce sujet mais je n'ai pas trouvé la solution dans mon cas.
J'utilise les pthreads car mon programme n'utilise pas forcément l'interface graphique gtk, c'est au choix pour l'utilisateur.
Donc voila, j'ai crée un bouton, quand l'utilisateur clique dessus, ca lance une fonction, qui lance les pthreads.
Le problème avec ce code c'est bien que tout marche bien au niveau des pthreads, le bouton "reste" enfoncé, rien ne se passe tant que les taches des pthreads ne sont pas terminés, et je voudrais que l'utilisateur puisse faire autre chose en attendant.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 void gtk_start(GtkWidget *menuitem, gpointer userdata) { fonction_qui_lance_plusieurs_pthreads(); return; } void gtk_principal() { ... g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(gtk_start), NULL); }
J'ai remplacé ce code par l'utilisation des gthreads car il semblerait que ca resoud le problème pour certains, ca donne ceci :
Et cette fois ci c'est encore pire, les pthreads sont bien exécutées mais l'interface graphique freeze indéfiniment, la c'est carrément une fenetre blanche "not responding" sous windows, meme quand les taches des pthreads sont terminés. Je suis obligé de quitter le programme violemment.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 void *fonc (gpointer *data) { fonction_qui_lance_plusieurs_pthreads(); return NULL; } void gtk_start(GtkWidget *menuitem, gpointer userdata) { GThread* th1; g_thread_init (NULL); gdk_threads_init (); gdk_threads_enter (); th1=g_thread_create ((GThreadFunc)fonc, NULL, TRUE, NULL); gdk_threads_leave (); g_thread_join(th1); return; } void gtk_principal() { ... g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(gtk_start), NULL); }
Ca compile sans erreurs et warnings,
je suis sous windows,
Si quelqu'un a une idée,
merci.