Перейти к основному содержимому

Регистрация 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.