Bonjour,

encore et toujours ce problème de thread et g_idle_add

j'ai un programme gtk qui lance un thread,

ce thread s'occupe de travailler sur des données et quelques fois il a besoin d'avertir l'utilisateur grace à des fenetres gtk, je me suis inspiré d'un tutorial sur gtk, j'ai donc 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
 
void print_message (const gchar *format, va_list va)
{
  gchar *message = g_strdup_vprintf (format, va);
  gchar *message_t = g_strdup_printf ("<small>%s</small>", message);
  g_free (message), message = NULL;
 
  g_idle_add (print_gidle_error,message_t);
  g_free (message_t), message_t = NULL;		 
}
 
gboolean print_gidle_error(gpointer data)
{
  gchar *message_t = data;
  GtkWidget *plabel = new_label(message_t,250,15,0.5,0.5,NULL);
  GtkWidget *p_dialog = gtk_dialog_box("Message d'erreur",plabel,200,100,0);
  gtk_dialog_run (GTK_DIALOG (p_dialog));
  gtk_widget_destroy (p_dialog);  
 
  return 1;
}
new_label c'est une fonction perso qui permet de créer un label.

Donc le thread principal fait son travail et appelle quelques fois la fonction :
print_message("coucou");

et la ce n'est pas une fenêtre gtk qui s'ouvre mais des dizaines, ca me semble normal vu le fonctionnement de gtk qui va appeler toutes les fonctions idle, dont la mienne, à chaque itération de sa boucle principale, et donc des boites de dialogues se créent indéfiniment. Il faudrait que je "dé-idle" print_gidle_error juste après sa première utilisation, mais comment ou alors trouver une autre solution ?

merci