Lua的shutdown程序执行回调结束,如何实现长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计300个文字,预计阅读时间需要2分钟。
我在用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元方法.
本文共计300个文字,预计阅读时间需要2分钟。
我在用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元方法.

