c - Lua shutdown/End 程序执行回调

标签 c lua luabind

我正在为 Lua 编写一个模块。在关闭 lua 解释器时,即使用户忘记隐式调用关闭例程,它也必须运行清理例程。

该模块主要是用 C 语言编写的。

我应该使用 Lua C Api 中的什么回调来检测程序执行结束?我想到的唯一想法是在代表我的模块的表上使用 __gc 元方法。有什么想法吗?

最佳答案

在 C 模块中,要做的简单事情就是创建一个完整的 userdata,其中包含一个带有 __gc 元方法的 metatable。将它存储在模块环境中的一个字段中,这样在卸载模块之前它不会被 GC 收集。

根据 the manual ,只有 userdata 得到收集器调用的它们的 __gc 元方法,所以你不能使用表来保存模块的终结器。

对于一个纯 Lua 编写的需要终结器的模块,你仍然需要一个 userdata 来支撑它。不受支持和未记录但广为人知的功能 newproxy()可用于创建一个空的 userdata 以及用于此目的的元表。将其称为 newproxy(true) 以获得一个元表,并使用 getmetatable() 检索元表,以便您可以添加 __gc元方法。

关于c - Lua shutdown/End 程序执行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3912296/

上一篇:区间树的C实现?

下一篇:c - 程序开发

相关文章:

string - Lua字符串空格、字母和数字

pointers - Lua 如何在 C++ 中将 void* 指针传递给 lua && 将其传递回 C++

c++ - luabind:如何通过引用将值从 C++ 传递到 lua 函数?

c - 如何解析 C 中的十进制 UUID 字符串?

c - 如何使用文件、环境和/或命令行初始化 C 程序?

c - 如何从 C 中的字符串中删除引号

Redis 中的 Lua 执行 - 原子性和规模?

lua - Lua 中 ()() 语法有特殊含义吗

c++ - Luabind:派生类作为参数

C程序奇怪的输出和错误的输出