加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua shutdown /程序执行回调结束

发布时间:2020-12-14 21:44:44 所属栏目:大数据 来源:网络整理
导读:我正在为Lua写一个模块.在关闭lua解释器时,即使用户忘记隐式调用shutdown例程,它也必须运行清理例程. 该模块大多用C语言编写. 我应该使用Lua C Api中的哪些回调来检测程序执行的结束?我唯一的想法是在表示我的模块的表上使用__gc元方法.有任何想法吗? 解决
我正在为Lua写一个模块.在关闭lua解释器时,即使用户忘记隐式调用shutdown例程,它也必须运行清理例程.

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

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读