Gtk - 调用具有可变周期的函数

时间:2016-06-12 08:38:53

标签: gtk ocaml

我正在使用gtk和ocaml进行编码,而且我是全新的使用它们。我知道您可以使用g_timeout_add在gtk中定期调用函数。但我想根据另一个事件更改被调用函数的周期。有没有办法做到这一点?

我写了一个基于事件的函数,会用新的句点再次调用g_timeout_add,但它看起来不行。我不确定,但似乎我可以增加时间但不能减少它。

修改

这是我正在做的一个简单的伪代码:

let tag = Glib.timeout.add period (fun () -> myfunc x; true;) in
let loop = Glib.Main.create true in
while Glib.Main.is_running loop do ignore (Glib.Main.iteration true) done

myfunc我正在做这样的事情:

let rec myfunc =fun x
    if x = "sth coming from somewhere else" then
        ignore (Glib.timeout.add new_period (fun () -> myfunc x; true;))

1 个答案:

答案 0 :(得分:0)

您正在添加一个匿名函数。然后,在myfunc中,您再次添加(不同的)匿名函数。 Glib如何知道您想要替换原来的功能?对于匿名函数,您必须显式删除旧函数。

阅读glib API,您有两个选择:

  1. 致电void g_source_remove (gint tag)以删除旧功能。
  2. 您也可以通过从回调函数返回零或FALSE来停止超时功能。
  3. 检查ocaml绑定中是否存在这两者中的任何一个。