Vala:如何异步等待x秒然后执行某些操作

时间:2017-01-09 17:04:33

标签: multithreading search gtk countdown vala

我想实现一个"类型来启动搜索" -feature就像我的程序中的谷歌搜索一样。在每种类型之后,我的程序启动一个新的搜索线程并杀死旧的搜索线程。

但是现在我想在搜索线程确实启动之前等待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 个答案:

答案 0 :(得分: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;
    }