2010-06-01 28 views
6

Necesito modificar el intervalo de tiempo de espera de un GLib mientras está en ejecución. ¿Es eso posible? Eché un vistazo al código fuente y me parece posible, pero se requiere el uso de algunas funciones no públicas de los componentes internos de GLib. ¿Debería volver a implementar GTimeoutSource o hay una forma de hacerlo?Tiempos de espera variables en GLib

Respuesta

3

En su función de tiempo de espera, que podría volver a agregar la función con el nuevo intervalo de tiempo de espera y luego regresar FALSE para eliminar el tiempo de espera con el viejo intervalo:

gboolean 
my_timeout_function(gpointer data) 
{ 
    // do stuff 
    // ... 

    if(need_to_change_interval) 
    { 
     g_timeout_add(new_interval, (GSourceFunc)my_timeout_function, data); 
     return FALSE; 
    } 
    return TRUE; 
} 
+0

Sí, esto es lo que yo pensaba, pero yo estaba buscando una mejor solución porque g_timeout_add crea un nuevo GSource (GTimeoutSource, de hecho) y al regresar FALSE destruye el GSource actual que estás usando cuando realmente solo quieres modificar el intervalo, no destruir y recrear todo el GTimeoutSource. – Matachana

+0

No creo que sea un problema de rendimiento notable. Los desarrolladores de Glib generalmente tienen una buena razón cuando no exponen un interno en su API. – ptomato

Cuestiones relacionadas