Página siguiente Página anterior Índice general

19. Tiempos de espera, ES (IO) y funciones ociosas (idle)

19.1 Tiempos de espera

Puede que se esté preguntando como hacer que GTK haga algo útil cuando se encuentra en gtk_main. Bien, tiene varias opciones. Utilizando las rutinas siguientes puede crear una función a la que se llamará cada interval milisegundos.

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

El primer argumento es el número de milisegundos que habrá entre dos llamadas a su función. El segundo argumento es la función a la que desea llamar, y el tercero, los datos que le pasará a ésta función. El valor devuelto es un ``identificador'' (un valor entero) que puede utilizar para detener las llamadas haciendo:

void gtk_timeout_remove( gint tag );

También puede hacer que cesen las llamadas a la función haciendo que la misma devuelva cero o FALSE. Obviamente esto significa que si quiere que se continue llamando a su función, deberá devolver un valor distinto de cero, es decir TRUE.

La declaración de su función debería ser algo como:

gint timeout_callback( gpointer data );

19.2 Monitorizando la ES

Otra característica divertida de GTK, es la habilidad que tiene de comprobar datos por usted en un descriptor de fichero (tal y como se devuelven por open(2) o socket(2)). Esto es especialmente útil para las aplicaciones de red. La función:

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

Donde el primer argumento es el descriptor de fichero que desea vigilar, y el segundo especifica que es lo que quiere que GDK busque. Puede ser uno de los siguientes:

Tal y como se habrá imaginado, el tercer argumento es la función a la que desea que se llame cuando se den las condiciones anteriores, y el cuarto son los datos que se le pasarán a ésta función.

El valor devuelto es un identificador que puede utilizarse para que GDK pare de vigilar ese fichero, utilizando la función

void gdk_input_remove( gint tag );

La función a la que quiere que se llame deberá declararse así:

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

Donde source y condition están especificados más arriba.

19.3 Funciones ociosas

¿Qué le parece si tuviese una función a la que se llamase cuando no ocurriese nada?

gint gtk_idle_add( GtkFunction function,
                   gpointer    data );

Esto hace que GTK llame a la función especificada cuando no ocurra nada más.

void gtk_idle_remove( gint tag );

No voy a explicar el significado de los argumentos ya que se parece mucho a los que he explicado más arriba. La función a la que se apunta mediante el primer argumento de gtk_idle_add será a la que se llame cuando llegue el momento. Como antes, si devuelve FALSE hará que cese de llamarse a la función.


Página siguiente Página anterior Índice general