2010-06-01 5 views
6

Je dois modifier l'intervalle de temporisation d'un GLib pendant son exécution. Est-ce possible? J'ai jeté un coup d'oeil au code source et cela me semble possible, mais il est nécessaire d'utiliser certaines fonctions non publiques des internes de GLib. Dois-je réimplémenter GTimeoutSource ou y a-t-il un moyen de le faire?Temporisations variables dans GLib

Répondre

3

Dans votre fonction de délai d'attente, vous pourriez ajouter à nouveau la fonction avec le nouvel intervalle de temps mort, puis revenez FALSE pour supprimer le délai d'attente avec l'ancien intervalle:

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

Oui, c'est ce que je pensais mais j'étais chercher une meilleure solution car g_timeout_add crée une nouvelle GSource (GTimeoutSource, en fait) et retourner FALSE détruit la source GSource que vous utilisez lorsque vous voulez juste modifier l'intervalle, ne pas détruire et recréer l'ensemble GTimeoutSource. – Matachana

+0

Je ne pense pas que ce sera un problème de performance notable. Les développeurs Glib ont généralement une bonne raison quand ils n'exposent pas un interne dans leur API. – ptomato