File: gtk_tut_it-15.html

package info (click to toggle)
gtk%2B1.2 1.2.10-18
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 14,468 kB
  • ctags: 12,966
  • sloc: ansic: 137,190; sh: 13,303; makefile: 1,170; perl: 328; awk: 274; lisp: 7
file content (131 lines) | stat: -rw-r--r-- 4,582 bytes parent folder | download | duplicates (5)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>GTK Tutorial: Funzioni periodiche, di I/O e di attesa</TITLE>
 <LINK HREF="gtk_tut_it-16.html" REL=next>
 <LINK HREF="gtk_tut_it-14.html" REL=previous>
 <LINK HREF="gtk_tut_it.html#toc15" REL=contents>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<A HREF="gtk_tut_it-16.html">Avanti</A>
<A HREF="gtk_tut_it-14.html">Indietro</A>
<A HREF="gtk_tut_it.html#toc15">Indice</A>
<HR NOSHADE>
<H2><A NAME="sec_timeouts"></A> <A NAME="s15">15. Funzioni periodiche, di I/O e di attesa</A></H2>

<P>
<H2><A NAME="ss15.1">15.1 Funzioni periodiche</A>
</H2>

<P>Probabilmente vi sarete chiesti come far fare qualcosa di utile a GTK
durante la chiamata alla gtk_main(). Ci sono diverse possibilit&agrave;.
Usando le seguenti funzioni si possono creare funzioni che vengono chiamate
periodicamente.
<P>
<BLOCKQUOTE><CODE>
<PRE>
gint gtk_timeout_add (guint32 interval,
                      GtkFunction function,
                      gpointer data);
</PRE>
</CODE></BLOCKQUOTE>
<P>Il primo argomento &egrave; il numero di millisecondi tra le chiamate alla 
funzione. Il secondo &egrave; la funzione periodica, mentre il terzo
rappresenta i dati che vengono passati alla funzione. Il valore restituito
&egrave; un'etichetta che pu&ograve; essere utilizzata per fermare la chiamata
periodica, passandolo alla funzione:
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gtk_timeout_remove (gint tag);
</PRE>
</CODE></BLOCKQUOTE>
<P>La chiamata periodica si ferma anche se la funzione periodica ritorna zero
o FALSE. Naturalmente questo vuol dire che se si vuole che la funzione periodica
continui ad essere richiamata, essa deve restituire un valore non nullo,
cio&egrave; TRUE.
<P>La dichiarazione della funzione periodica dovrebbe essere come questa:
<P>
<BLOCKQUOTE><CODE>
<PRE>
gint timeout_callback (gpointer data);
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss15.2">15.2 Controllo dell'I/O</A>
</H2>

<P>Un'altra utile caratteristica di GTK &egrave; la possibilit&agrave; di fargli
controllare che siano verificate certe condizioni su un descrittore di file 
(come quelli restituiti da open(2) o socket(2)). Questo &egrave; utile in
particolar modo per le applicazioni di rete. La funzione &egrave; la seguente:
<P>
<BLOCKQUOTE><CODE>
<PRE>
gint gdk_input_add (gint source,
                    GdkInputCondition condition,
                    GdkInputFunction  function,
                    gpointer data);
</PRE>
</CODE></BLOCKQUOTE>
<P>Il primo argomento &egrave; il descrittore che si desidera venga controllato,
mentre il secondo specifica quale condizione si vuole che GDK controlli.
Questa pu&ograve; essere una tra:
<P>GDK_INPUT_READ - Chiama la funzione quando ci sono dati pronti per la lettura
nel descrittore di file.
<P>GDK_INPUT_WRITE - Chiama la funzione quando il descrittore di file &egrave; 
pronto per la scrittura.
<P>Come sicuramente avrete gi&agrave; intuito, il terzo parametro &egrave; la
funzione da chiamare quando la condizione specificata &egrave; soddisfatta,
mentre il quarto rappresenta i dati da passare a questa funzione.
<P>Il valore di ritorno  &egrave; un etichetta che pu&ograve; essere usata per
fermare il controllo di GDK sul descrittore di file, usando la seguente
funzione:
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gdk_input_remove (gint tag);
</PRE>
</CODE></BLOCKQUOTE>
<P>La funzione da richiamare va dichiarata cos&igrave;:
<P>
<BLOCKQUOTE><CODE>
<PRE>
void input_callback (gpointer data, gint source, 
                     GdkInputCondition condition);
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>
<H2><A NAME="ss15.3">15.3 Funzioni di attesa (``Idle'')</A>
</H2>

<P>Cosa fare se si ha una funzione che si vuole venga chiamata quando non
sta accadendo nient'altro?
<P>
<BLOCKQUOTE><CODE>
<PRE>
gint gtk_idle_add (GtkFunction function,
                   gpointer data);
</PRE>
</CODE></BLOCKQUOTE>
<P>Questa fa si che GDK chiami la funzione specificata quando non c'&egrave;
nessuna altra operazione in corso.
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gtk_idle_remove (gint tag);
</PRE>
</CODE></BLOCKQUOTE>
<P>Non ci soffermeremo sul significato dei parametri in quanto del tutto analoghi
ai precedenti. La funzione puntata dal primo argomento della gtk_idle_add 
viene chiamata non appena se ne presenta l'opportunit&agrave;; come 
negli altri casi, se essa restituisce FALSE non viene pi&ugrave; chiamata.
<P>
<HR NOSHADE>
<A HREF="gtk_tut_it-16.html">Avanti</A>
<A HREF="gtk_tut_it-14.html">Indietro</A>
<A HREF="gtk_tut_it.html#toc15">Indice</A>
</BODY>
</HTML>