簡體   English   中英

GLib 超時 memory 管理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM