Zum Hauptinhalt springen

Beendigungs-Callback registrieren (register_atexit)

Deklaration

original_callback = register_atexit(name, callback)

Parameter

  • name
    Textwert, erforderlich; Kennung des registrierten Callbacks. Ein gleicher name überschreibt den bereits registrierten Callback.
  • callback
    Funktion, erforderlich; beim Beenden des Skripts ausgeführte Funktion. Sie sollte schnell ausgeführt werden können und sicher wiederholbar sein. nil hebt die Registrierung des Callbacks für den aktuellen name auf.

Rückgabewert

  • original_callback
    Funktion; alter Callback, der von der Registrierung mit demselben Namen überschrieben wurde. Wenn zuvor keiner registriert war, wird nil zurückgegeben; damit kann der alte Callback wiederhergestellt werden.

Beschreibung

Ein mit register_atexit registrierter Callback wird beim Beenden des Skripts ausgeführt, auch wenn der Benutzer das Skript mit der Lautstärketaste beendet, und garantiert vor der Lua-Speicherbereinigung aufgerufen.
Werden mehrere Callbacks mit unterschiedlichen name-Werten registriert, ist ihre Aufrufreihenfolge nicht festgelegt. Für eine bestimmte Reihenfolge muss sie in einem einzelnen Callback selbst gesteuert werden.
Bei zeitaufwendigen Operationen im Callback muss die Dauer selbst begrenzt werden, da sie sonst das Beenden beeinträchtigen kann.
Diese Funktion ist erst in Versionen nach 20250705 verfügbar.

Beispiel

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

Hinweis: Der obige Code verwendet die Funktionen sys.toast und sys.msleep aus anderen Kapiteln.