1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> |
---|
2 | <HTML> |
---|
3 | <HEAD> |
---|
4 | <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> |
---|
5 | <TITLE>Didacticiel: Temporisations, fonctions d'E/S et d'attente</TITLE> |
---|
6 | <LINK HREF="gtk_tut_fr-16.html" REL=next> |
---|
7 | <LINK HREF="gtk_tut_fr-14.html" REL=previous> |
---|
8 | <LINK HREF="gtk_tut_fr.html#toc15" REL=contents> |
---|
9 | </HEAD> |
---|
10 | <BODY BGCOLOR="#FFFFFF"> |
---|
11 | <A HREF="gtk_tut_fr-16.html">Page suivante</A> |
---|
12 | <A HREF="gtk_tut_fr-14.html">Page précédente</A> |
---|
13 | <A HREF="gtk_tut_fr.html#toc15">Table des matières</A> |
---|
14 | <HR NOSHADE> |
---|
15 | <H2><A NAME="sec_timeouts"></A> <A NAME="s15">15. Temporisations, fonctions d'E/S et d'attente</A></H2> |
---|
16 | |
---|
17 | <P> |
---|
18 | <H2><A NAME="ss15.1">15.1 Temporisations</A> |
---|
19 | </H2> |
---|
20 | |
---|
21 | <P>Vous pouvez vous demander comment faire pour que GTK fasse quelque |
---|
22 | chose d'utile lorsqu'il est dans <EM>gtk_main</EM>. En fait, on a |
---|
23 | plusieurs options. L'utilisation des fonctions suivantes permet de |
---|
24 | créer une temporisation qui sera appelée tous les |
---|
25 | <EM>interval</EM> millisecondes. |
---|
26 | <P> |
---|
27 | <BLOCKQUOTE><CODE> |
---|
28 | <PRE> |
---|
29 | gint gtk_timeout_add (guint32 interval, |
---|
30 | GtkFunction function, |
---|
31 | gpointer data); |
---|
32 | </PRE> |
---|
33 | </CODE></BLOCKQUOTE> |
---|
34 | <P>Le premier paramètre est le nombre de millisecondes entre les appels à |
---|
35 | notre fonction. Le deuxième est la fonction à appeler et le troisième |
---|
36 | est la donnée passée à cette fonction de rappel. La valeur retournée |
---|
37 | est un « marqueur » de type entier qui pourra être utilisé pour |
---|
38 | arrêter la temporisation en appelant : |
---|
39 | <P> |
---|
40 | <BLOCKQUOTE><CODE> |
---|
41 | <PRE> |
---|
42 | void gtk_timeout_remove (gint tag); |
---|
43 | </PRE> |
---|
44 | </CODE></BLOCKQUOTE> |
---|
45 | <P>On peut aussi stopper la fonction de temporisation en faisant |
---|
46 | retourner zéro ou FALSE à notre fonction de rappel. Évidemment, cela |
---|
47 | veut dire que si vous voulez que votre fonction continue à être |
---|
48 | appelée, elle doit retourner une valeur non nulle, ou TRUE. |
---|
49 | <P>La déclaration de votre fonction de rappel doit ressembler à ça : |
---|
50 | <P> |
---|
51 | <BLOCKQUOTE><CODE> |
---|
52 | <PRE> |
---|
53 | gint timeout_callback (gpointer data); |
---|
54 | </PRE> |
---|
55 | </CODE></BLOCKQUOTE> |
---|
56 | <P> |
---|
57 | <H2><A NAME="ss15.2">15.2 Surveillance des E/S</A> |
---|
58 | </H2> |
---|
59 | |
---|
60 | <P>Une autre caractéristique intéressante du GTK est la possibilité de |
---|
61 | vérifier les données d'un descripteur de fichier (celles retournées |
---|
62 | par <EM>open</EM>(2) ou <EM>socket</EM>(2)). C'est particulièrement pratique pour les |
---|
63 | applications réseau. La fonction suivante permet cette |
---|
64 | vérification : |
---|
65 | <P> |
---|
66 | <BLOCKQUOTE><CODE> |
---|
67 | <PRE> |
---|
68 | gint gdk_input_add (gint source, |
---|
69 | GdkInputCondition condition, |
---|
70 | GdkInputFunction function, |
---|
71 | gpointer data); |
---|
72 | </PRE> |
---|
73 | </CODE></BLOCKQUOTE> |
---|
74 | <P>Le premier paramètre est le descripteur de fichier que l'on veut |
---|
75 | étudier, le second spécifie ce qu'on veut que le GDK recherche. Cela |
---|
76 | peut être : |
---|
77 | <P>GDK_INPUT_READ - Appel <EM>function</EM> lorsqu'il y a une donnée prête à |
---|
78 | être lue dans le descripteur de fichier. |
---|
79 | <P>GDK_INPUT_WRITE - Appel de <EM>function</EM> lorsque le descripteur de |
---|
80 | fichier est prêt pour une écriture. |
---|
81 | <P>Je suis sûr que vous vous doutez, maintenant, que le troisième |
---|
82 | paramètre est la fonction que l'on veut appeler lorsque les conditions |
---|
83 | ci-dessus sont satisfaites. Le dernier paramètre est la donnée à |
---|
84 | passer à cette fonction. |
---|
85 | <P>La valeur retournée est un marqueur qui pourra être utilisé pour dire |
---|
86 | au GDK de cesser de surveiller ce descripteur à l'aide de la fonction : |
---|
87 | <P> |
---|
88 | <BLOCKQUOTE><CODE> |
---|
89 | <PRE> |
---|
90 | void gdk_input_remove (gint tag); |
---|
91 | </PRE> |
---|
92 | </CODE></BLOCKQUOTE> |
---|
93 | <P>La fonction de rappel doit être déclarée de la façon suivante : |
---|
94 | <P> |
---|
95 | <BLOCKQUOTE><CODE> |
---|
96 | <PRE> |
---|
97 | void input_callback (gpointer data, gint source, |
---|
98 | GdkInputCondition condition); |
---|
99 | </PRE> |
---|
100 | </CODE></BLOCKQUOTE> |
---|
101 | <P> |
---|
102 | <P> |
---|
103 | <H2><A NAME="ss15.3">15.3 Fonctions d'attente</A> |
---|
104 | </H2> |
---|
105 | |
---|
106 | <P>Que se passe-t'il si vous avez une fonction qui doit être appelée |
---|
107 | lorsque rien d'autre ne se passe ? On utilise la fonction suivante qui force |
---|
108 | GTK à appeler <EM>function</EM> lorsqu'on est en phase d'inaction ; |
---|
109 | <P> |
---|
110 | <BLOCKQUOTE><CODE> |
---|
111 | <PRE> |
---|
112 | gint gtk_idle_add (GtkFunction function, |
---|
113 | gpointer data); |
---|
114 | </PRE> |
---|
115 | </CODE></BLOCKQUOTE> |
---|
116 | <P> |
---|
117 | <BLOCKQUOTE><CODE> |
---|
118 | <PRE> |
---|
119 | void gtk_idle_remove (gint tag); |
---|
120 | </PRE> |
---|
121 | </CODE></BLOCKQUOTE> |
---|
122 | <P>Je n'expliquerai pas la signification des paramètres car ils |
---|
123 | ressemblent beaucoup à ceux déjà vus ci-dessus. La fonction pointée |
---|
124 | par le premier paramètre de <EM>gtk_idle_add()</EM> sera appelée à chaque |
---|
125 | occasion. Comme pour les autres, retourner FALSE empêchera la fonction |
---|
126 | d'attente d'être appelée. |
---|
127 | <P> |
---|
128 | <HR NOSHADE> |
---|
129 | <A HREF="gtk_tut_fr-16.html">Page suivante</A> |
---|
130 | <A HREF="gtk_tut_fr-14.html">Page précédente</A> |
---|
131 | <A HREF="gtk_tut_fr.html#toc15">Table des matières</A> |
---|
132 | </BODY> |
---|
133 | </HTML> |
---|