超时 Timeouts
你也许想知道如何让 GTK 在gtk_main中做有用的工作。
你有几种选择。用下面的函数,你可以创建一个超时函数,每隔一段时间该函数被调用。
gint gtk_timeout_add( guint32 interval,
GtkFunction function,
gpointer data );
参数:
- interval
该参数是以毫秒为单位的你的函数被调用的时间间隔。- function
第二个参数是你想调用的函数。- data
第三个参数是传递给回调函数的数据。返回值是一个整型的标记,该标记可以用于停止超时,用函数:
超时回调函数
void gtk_timeout_remove( gint tag );
你也可以通过从回调函数返回零或 FALSE 来停止超时函数。很显然,如果你想让你的函数继续被调用,应该返回一个非零值,如 TRUE。
回调函数应该声明为:
gint timeout_callback( gpointer data );
监控IO
GDK ( GTK 的底层库) 的一个极好的特性是能让它检查文件描述符 (如 open(2) 或 socket(2) 返回的) 上的数据。这对网络应用程序尤其有用。这个函数:
gint gdk_input_add( gint source,
GdkInputCondition condition,
GdkInputFunction function,
gpointer data );
第一个参数是你想监控的文件描述符。
第二个参数指定你想让 GDK 寻找什么。它可以是:
GDK_INPUT_READ — 当文件描述符有数据可供读取时调用你的函数。
GDK_INPUT_WRITE — 当文件描述符做好写的准备时调用你的函数。
我确信你已经看出来了,第三个参数是当满足上述条件时你想要调用的函数,第四个参数是传递给该函数的参数。
返回值是一个标记,该标记可用于让 GDK 停止对文件描述符的监控,用函数:
void gdk_input_remove( gint tag );
回调函数应该声明为:
void input_callback( gpointer data,
gint source,
GdkInputCondition condition );
source 和 condition 就是前述的参数。
Idle 函数
如果你想在程序空闲时调用一个函数怎么办?
gint gtk_idle_add( GtkFunction function,
gpointer data );
该函数让 GTK 在程序空闲时调用指定的函数。
void gtk_idle_remove( gint tag );
我不会解释各参数的意义,它们跟前面的差不多。第一个参数指向的函数会在任何机会出现时被调用。和其它函数一样,返回 FALSE 停止调用 idle 函数。