【问题标题】:GTK: cancel timeoutGTK:取消超时
【发布时间】:2023-03-24 15:49:01
【问题描述】:

GTK 允许您使用g_timeout_add 设置超时。就像g_signal_connect 一样,g_timeout_add 函数返回一个表示超时的 id。那么,有没有办法使用 id 来取消超时?查看documentation,我看不到任何取消超时事件的方法,但我认为必须有某种方法,否则g_timeout_add 返回的id 值有什么意义?

那么,有没有办法取消超时事件,或者这只是需要通过设置可以在用户提供的超时处理函数中检查的“取消标志”来手动处理的事情?

【问题讨论】:

    标签: gtk glib


    【解决方案1】:

    有两种方法可以移除通过g_timeout_add()注册的回调:

    • 让回调函数返回FALSE
    • 使用g_timeout_add()返回的标识符调用g_source_remove()

    【讨论】:

    • 无论如何我都可以在第一次通话之前取消回电。例如:我在 10 秒后安排它,我决定在 5 秒后取消它(它尚未调用)。第一次回调后,您将获得可以取消的标识符,但在此之前可以取消吗?
    • @Sagar,是的,g_source_remove()。它采用g_timeout_add() 返回的标识符,因此您不必等待回调被调用。
    • 哦,我现在明白了。使用 g_timeout_add() 调度函数,使用来自 g_timeout_add() 的 ret 值,您可以取消回调调用。我的理解对吗?
    • 对于未来的谷歌搜索:GLib-CRITICAL **: Source ID <id> was not found when attempting to remove it 等消息可能表明调用了g_source_remove() 以删除未正确配置的超时处理程序。
    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多