g_idle_add et création d'une boite de dialogue
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:
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