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.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
}
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.

J'ai remplacé ce code par l'utilisation des gthreads car il semblerait que ca resoud le problème pour certains, ca donne ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
}
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.

Ca compile sans erreurs et warnings,
je suis sous windows,

Si quelqu'un a une idée,
merci.