我正在使用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;))
答案 0 :(得分:0)
您正在添加一个匿名函数。然后,在myfunc中,您再次添加(不同的)匿名函数。 Glib如何知道您想要替换原来的功能?对于匿名函数,您必须显式删除旧函数。
阅读glib API,您有两个选择:
void g_source_remove (gint tag)
以删除旧功能。检查ocaml绑定中是否存在这两者中的任何一个。