[英]pygtk glib.timeout_add(): How to tell if timer not being destroyed?
[英]GLib timeout memory management
我有一個GLib.timeout_add_seconds()
計時器,我偶爾會更新超時間隔,如下所示:
self.timer_id = GLib.timeout_add_seconds(interval, self.on_timeout, user_data)
...
def on_timeout(self, user_data):
...
if change_timeout_interval:
self.timer_id = GLib.timeout_add_seconds(new_interval, self.on_timeout, user_data)
return False
...
因此,新計時器的 ID 存儲在同一個self.timer_id
變量中,當我從回調中返回 false 時,舊計時器被刪除(?)。 我擔心 memory 管理,如此處所述,尤其是因為我將我的user_data
變量傳遞給回調 function。 我只使用GLib.source_remove()
來刪除“最終”計時器 ID,而不是之前在回調 function 中替換的所有之前的 ID。 這很糟糕嗎? 如果是這樣,我怎么能避免這種情況?
在我看來很好。 在您用新的計時器 ID 覆蓋self.timer_id
時,通過返回False
可以保證最終刪除舊的計時器 ID(並且不會再次分派)。
您是否看到任何問題症狀,例如多次調度計時器,或者valgrind --tool=memcheck
顯示泄漏?
一個小提示:您可以使用return GLib.SOURCE_REMOVE
而不是return False
使代碼更清晰。 它們是等價的。 反過來是return GLib.SOURCE_CONTINUE
而不是return True
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.