Регистрация callback-функции завершения (register_atexit)
Объявление
original_callback = register_atexit(name, callback)
Параметры
- name
Текст, обязательный параметр; идентификатор регистрируемого callback. Повторное использование того жеnameзаменяет зарегистрированный callback. - callback
Функция, обязательный параметр; выполняется при выходе скрипта. Она должна работать быстро и быть безопасной при повторном вызове. Значение nil отменяет регистрацию callback для текущегоname.
Возвращаемое значение
- original_callback
Функция — прежний callback, заменённый регистрацией с тем же именем; если он не был зарегистрирован, возвращаетсяnil. Его можно использовать для восстановления прежнего callback.
Описание
Callback, зарегистрированный через
register_atexit, выполняется при выходе из скрипта, в том числе при его завершении пользователем клавишей громкости, и гарантированно вызывается до сборки мусора Lua.
При регистрации нескольких callback с разнымиnameпорядок их вызова не определён; для последовательного выполнения организуйте вызовы самостоятельно внутри одного callback.
Если callback должен выполнять длительную операцию, самостоятельно ограничьте её продолжительность, иначе это может ухудшить завершение работы.
Функция доступна только в версиях после 20250705.
Пример
register_atexit("cleanup", function()
sys.toast("脚本退出前清理资源")
sys.msleep(300)
end)
while true do
sys.toast("使用音量键尝试退出脚本\n" .. os.date("%Y-%m-%d %H:%M:%S"))
sys.msleep(1000)
end
Примечание: в приведённом коде используются функции из других глав — sys.toast и sys.msleep.