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 :
new_label c'est une fonction perso qui permet de créer un label.
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; }
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
Partager