当前位置 : 主页 > 网络编程 > lua >

Lua shutdown /程序执行回调结束

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在为Lua写一个模块.在关闭lua解释器时,即使用户忘记隐式调用shutdown例程,它也必须运行清理例程. 该模块大多用C语言编写. 我应该使用Lua C Api中的哪些回调来检测程序执行的结束?我
我正在为Lua写一个模块.在关闭lua解释器时,即使用户忘记隐式调用shutdown例程,它也必须运行清理例程.

该模块大多用C语言编写.

我应该使用Lua C Api中的哪些回调来检测程序执行的结束?我唯一的想法是在表示我的模块的表上使用__gc元方法.有任何想法吗?

在C模块中,最简单的方法是使用带有__gc元方法的元表创建一个完整的用户数据.将其存储在模块环境中的某个字段中,以便在卸载模块之前GC不会收集它.

根据the manual,只有userdata获取收集器调用的__gc元方法,因此您不能使用表来保存模块的终结器.

对于用纯Lua编写的需要终结器的模块,你仍然需要有一个用户数据来支持它.不支持和未记录但广泛知晓的函数newproxy()可用于创建具有用于此目的的元表的否则为空的用户数据.将其称为newproxy(true)以获取具有metatable的一个,并使用getmetatable()来检索metatable,以便您可以向其添加__gc元方法.

网友评论