2010-06-01 8 views
6

Yürütme sırasında bir GLib'in zaman aşımı aralığını değiştirmem gerekiyor. Mümkün mü? Kaynak koduna bir göz attım ve bana göre mümkün görünüyor, ancak GLib internals'ın bazı kamuya açık olmayan işlevleri kullanması gerekiyor. GTimeoutSource'ı yeniden uyarlamalı mıyım yoksa bunu yapmanın bir yolu var mı?GLib'de değişken zamanaşımları

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; 
} 

cevap

3

, yeni zaman aşımı aralığı ile işlevini yeniden ekleyin ve ardından eski aralığı ile zaman aşımı kaldırmak için FALSE geri dönebilirler g_timeout_add yeni bir GSource (aslında GTimeoutSource) yaratır ve FALSE döndürmek, gerçekten sadece aralığı değiştirmek, yok etmek ve tüm GTimeoutSource'u yeniden oluşturmak istediğinizde kullandığınız mevcut GSource'u yok eder.
+0

Evet, bu düşündüğümden ama ne olduğunu: zaman aşımı fonksiyonunda – Matachana

+0

Fark edilebilir bir performans sorunu olacağını düşünmüyorum. Glib geliştiricileri genellikle API'larında bir dahili göstermedikleri için iyi bir nedene sahiptir. – ptomato