【问题标题】:Avoiding warning from GLib with GLib.source_remove()使用 GLib.source_remove() 避免来自 GLib 的警告
【发布时间】:2018-05-02 14:23:24
【问题描述】:

当我需要我的程序的一部分时,使用

设置 GLib 超时功能
self.timeout_id = GLib.timeout_add_seconds(refresh, self._check_price)

我用

def stop(self):
    if self.timeout_id:
        GLib.source_remove(self.timeout_id)

在尝试删除它之前确保这个timeout_id 仍然存在。

但我仍然不时收到这些讨厌的错误消息:

警告:尝试删除源 ID 443 时未找到它
GLib.source_remove(self.timeout_id)

怎么办?

【问题讨论】:

    标签: python glib


    【解决方案1】:

    源显然是通过stop()以外的其他控制路径删除的。我能想到的唯一候选者(根据您提供的代码)是 self._check_price 方法。如果你从那里返回False/GLib.SOURCE_REMOVE,你还应该取消设置self.timeout_id

    def _check_price(self):
        …
        self.timeout_id = 0
        return GLib.SOURCE_REMOVE
    

    【讨论】:

    • 啊哈。所以我希望如果源被删除,它会自动取消设置。那就不是这样了!我会进行更多测试并接受它是否有效。非常感谢!
    • 如何自动取消设置?你还没有在任何地方将指针 &self.timeout_id 传递给 GLib。
    • 事后看来似乎合乎逻辑,但我缺乏知识并且发现 GLib 和 GTK 的文档有些难以理解。这工作正常,谢谢:)
    • 如果您发现某些特定的文档令人困惑或缺乏,请提交错误 (bugzilla.gnome.org/enter_bug.cgi?product=glib),但请注意,只有在给出具体示例的情况下,我们才能真正改进文档。再缺乏。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多