bonjour

pour mon application j'ai besoin qu'une fonction tourne en arrière plan sans bloquer l'interface graphique, cette fonction va contenir une boucle infini qui va faire quelque vérification et va afficher une boite de dialogue comme le font les antivirus .

alors voila un code avec une fonction main et une fonction alerte qui se bloque avec les threads de la glib.


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
29
30
31
32
33
34
35
36
37
38
39
40
 
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <glib.h>
 
void *alert (gpointer *data)
{
    /****code pour une boite de dilogue*****/
GtkWidget *dialog = NULL;
dialog = gtk_message_dialog_new (GTK_WINDOW (NULL), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "alert");
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
g_thread_exit (0);
 
  }
 
int main (int argc, char *argv[])
{
 
GtkWidget *win = NULL;
gtk_init (&argc, &argv);
 
g_thread_init (NULL);
 
/****  creation de la fenetre principale*****/
win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (win), 8);
  gtk_window_set_default_size(GTK_WINDOW(win), 500, 500);
  gtk_window_set_title (GTK_WINDOW (win), "fenetre principale");
  gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
  g_signal_connect (win, "destroy", gtk_main_quit, NULL);
    gtk_widget_show_all (win);
/*************************************************************/
 
g_thread_create (alert, NULL, FALSE, NULL);
  gtk_main ();
  return 0;
}

merci pour votre aide.