2017-01-09 62 views
1

我想實現一個「類型開始搜索」 - 像我的程序中的谷歌搜索功能。每種類型後,我的程序啓動一個新的搜索線程並殺死舊的。Vala:如何異步等待x秒,然後執行一些操作然後

但是現在我想在搜索線程實際開始之前等待2秒。像這樣的:

Countdown countdown = new Countdown(); 
countdown.set_action_after_x_secons(2sec, do_search); 


private void SearchEntry_search_changed(){ 
    countdown.reset_time(); //resets time to 2 seconds again 
    actual_search = SearchEntry.get_text(); 
} 

private void do_search(){ 
// actual search here 
} 

我想避免產卵到許多無用的線程。在Vala中這樣做的最佳方式是什麼?

+1

GtkSearchEntry已經有150毫秒的觸發'搜索changed'的確切同樣的原因,你想你的2S延遲我之前想象的內部延時。似乎沒有辦法調整延遲時間;我想你可以將它作爲GNOME Bugzilla的功能請求嗎? – andlabs

+1

爲了其他目的,基於時間的迭代的方法是使用'GLib.Timeout.add()'。 – andlabs

+0

150毫秒的延遲對我的需求有點短。但超時似乎很有趣。 –

回答

1

感謝@andlabs! GLib.Timeout是關鍵字。對於解決方案在這裏看到:

private int search_delay = 1000; 
    private uint delayed_changed_id; 

    public void search(string txt){ 
     search_text = txt; 
     reset_timeout(); 
    } 

    private void reset_timeout(){ 
     if(delayed_changed_id > 0) 
      Source.remove(delayed_changed_id); 
     delayed_changed_id = Timeout.add(search_delay, timeout); 
    } 

    private bool timeout(){ 
     // do actual search here! 

     delayed_changed_id = 0; 

     return false; 
    } 
相關問題