2010-06-01 45 views
6

我需要修改GLib的執行時間間隔。那可能嗎?我看了看源代碼,看起來可能對我有用,但需要使用GLib內部的一些非公共函數。我應該重新實現GTimeoutSource還是有辦法做到這一點?GLib中的變量超時

回答

3

在你超時功能,您可以用新的超時間隔重新添加函數,然後返回FALSE與舊間隔清除超時:

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

啊,這是我的想法,但我尋找更好的解決方案,因爲g_timeout_add創建一個新的GSource(實際上是GTimeoutSource),並且返回FALSE會破壞當前正在使用的當前GSource,而不是銷燬並重新創建整個GTimeoutSource。 – Matachana 2010-06-01 10:39:01

+0

我不認爲這會是一個明顯的性能問題。當Glib開發人員不在API中公開內部函數時,他們通常會有一個很好的理由。 – ptomato 2010-06-01 11:07:09