Page suivante Page précédente Table des matières

15. Temporisations, fonctions d'E/S et d'attente

15.1 Temporisations

Vous pouvez vous demander comment faire pour que GTK fasse quelque chose d'utile lorsqu'il est dans gtk_main. En fait, on a plusieurs options. L'utilisation des fonctions suivantes permet de créer une temporisation qui sera appelée tous les interval millisecondes.

gint gtk_timeout_add (guint32 interval,
                      GtkFunction function,
                      gpointer data);

Le premier paramètre est le nombre de millisecondes entre les appels à notre fonction. Le deuxième est la fonction à appeler et le troisième est la donnée passée à cette fonction de rappel. La valeur retournée est un « marqueur » de type entier qui pourra être utilisé pour arrêter la temporisation en appelant :

void gtk_timeout_remove (gint tag);

On peut aussi stopper la fonction de temporisation en faisant retourner zéro ou FALSE à notre fonction de rappel. Évidemment, cela veut dire que si vous voulez que votre fonction continue à être appelée, elle doit retourner une valeur non nulle, ou TRUE.

La déclaration de votre fonction de rappel doit ressembler à ça :

gint timeout_callback (gpointer data);

15.2 Surveillance des E/S

Une autre caractéristique intéressante du GTK est la possibilité de vérifier les données d'un descripteur de fichier (celles retournées par open(2) ou socket(2)). C'est particulièrement pratique pour les applications réseau. La fonction suivante permet cette vérification :

gint gdk_input_add (gint source,
                    GdkInputCondition condition,
                    GdkInputFunction  function,
                    gpointer data);

Le premier paramètre est le descripteur de fichier que l'on veut étudier, le second spécifie ce qu'on veut que le GDK recherche. Cela peut être :

GDK_INPUT_READ - Appel function lorsqu'il y a une donnée prête à être lue dans le descripteur de fichier.

GDK_INPUT_WRITE - Appel de function lorsque le descripteur de fichier est prêt pour une écriture.

Je suis sûr que vous vous doutez, maintenant, que le troisième paramètre est la fonction que l'on veut appeler lorsque les conditions ci-dessus sont satisfaites. Le dernier paramètre est la donnée à passer à cette fonction.

La valeur retournée est un marqueur qui pourra être utilisé pour dire au GDK de cesser de surveiller ce descripteur à l'aide de la fonction :

void gdk_input_remove (gint tag);

La fonction de rappel doit être déclarée de la façon suivante :

void input_callback (gpointer data, gint source, 
                     GdkInputCondition condition);

15.3 Fonctions d'attente

Que se passe-t'il si vous avez une fonction qui doit être appelée lorsque rien d'autre ne se passe ? On utilise la fonction suivante qui force GTK à appeler function lorsqu'on est en phase d'inaction ;

gint gtk_idle_add (GtkFunction function,
                   gpointer data);

void gtk_idle_remove (gint tag);

Je n'expliquerai pas la signification des paramètres car ils ressemblent beaucoup à ceux déjà vus ci-dessus. La fonction pointée par le premier paramètre de gtk_idle_add() sera appelée à chaque occasion. Comme pour les autres, retourner FALSE empêchera la fonction d'attente d'être appelée.


Page suivante Page précédente Table des matières