📄 gtk_tut_it-15.html
字号:
<!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 GTKdurante la chiamata alla gtk_main(). Ci sono diverse possibilità.Usando le seguenti funzioni si possono creare funzioni che vengono chiamateperiodicamente.<P><BLOCKQUOTE><CODE><PRE>gint gtk_timeout_add (guint32 interval, GtkFunction function, gpointer data);</PRE></CODE></BLOCKQUOTE><P>Il primo argomento è il numero di millisecondi tra le chiamate alla funzione. Il secondo è la funzione periodica, mentre il terzorappresenta i dati che vengono passati alla funzione. Il valore restituitoè un'etichetta che può essere utilizzata per fermare la chiamataperiodica, 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 zeroo FALSE. Naturalmente questo vuol dire che se si vuole che la funzione periodicacontinui ad essere richiamata, essa deve restituire un valore non nullo,cioè 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 è la possibilità di farglicontrollare che siano verificate certe condizioni su un descrittore di file (come quelli restituiti da open(2) o socket(2)). Questo è utile inparticolar modo per le applicazioni di rete. La funzione è 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 è il descrittore che si desidera venga controllato,mentre il secondo specifica quale condizione si vuole che GDK controlli.Questa può essere una tra:<P>GDK_INPUT_READ - Chiama la funzione quando ci sono dati pronti per la letturanel descrittore di file.<P>GDK_INPUT_WRITE - Chiama la funzione quando il descrittore di file è pronto per la scrittura.<P>Come sicuramente avrete già intuito, il terzo parametro è lafunzione da chiamare quando la condizione specificata è soddisfatta,mentre il quarto rappresenta i dati da passare a questa funzione.<P>Il valore di ritorno è un etichetta che può essere usata perfermare il controllo di GDK sul descrittore di file, usando la seguentefunzione:<P><BLOCKQUOTE><CODE><PRE>void gdk_input_remove (gint tag);</PRE></CODE></BLOCKQUOTE><P>La funzione da richiamare va dichiarata così:<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 nonsta 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'è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 analoghiai precedenti. La funzione puntata dal primo argomento della gtk_idle_add viene chiamata non appena se ne presenta l'opportunità; come negli altri casi, se essa restituisce FALSE non viene più 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>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -