Lua关闭/程序执行结束回调

2023-12-09

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

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

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


从 C 模块,简单的事情就是创建一个完整的userdata with a metatable with a __gc元方法。将其存储在模块环境中的字段中,以便在卸载模块之前 GC 不会收集它。

根据手册, only userdata得到他们的__gc由收集器调用的元方法,因此不能使用表来保存模块的终结器。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua关闭/程序执行结束回调 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 将 HttpClient 与 SSL 和证书结合使用

    虽然我已经熟悉 HTTPS 和 SSL 的概念 但我最近开始一些开发 发现我有点困惑 要求是我编写一个小型 Java 应用程序 该应用程序在连接到扫描仪的机器上运行 扫描文档时 会拾取该文档并将文件 通常为 PDF 通过互联网发送到我们的应
  • Python 检测 EOF

    我正在尝试在读取 csv 文件时编写这样的 if 语句 if row or EOF do stuff 我在网上搜索过 但找不到任何方法可以做到这一点 帮助 with open fname rb as f for line in f line
  • ios9 拍照时仅显示空白屏幕

    我希望使用 IOS 9 手机的访问者能够通过网页将图片上传到我的网络服务器上 在 iOS 8 及之前的版本中 这可以通过使用 input 元素简单地实现
  • Java支持多重继承吗?

    从 Java 的事实来看 Java 中的所有类都有一个父类Object 但是同样的Java说它不支持多重继承 但是这段代码是什么意思呢 public class A extends B Blah blah blah 从上面的代码来看 这意味
  • Python __call__ 特殊方法实例

    我知道 call 当调用类的实例时 会触发类中的方法 但是 我不知道什么时候可以使用这种特殊方法 因为可以简单地创建一个新方法并执行在 call 方法 您可以调用方法 而不是调用实例 如果有人给我这种特殊方法的实际用法 我将非常感激 本示例
  • 类型错误:使用 pandas apply 和 lambda 时,字符串索引必须是整数

    我有一个数据框 一列是 URL 另一列是名称 我只是尝试添加第三列 该列接受 URL 并创建 HTML 链接 专栏newsSource有链接名称 并且url有网址 对于数据框中的每一行 我想创建一个具有以下内容的列 a href newsS
  • 获取导致 SQLiteConstraintException 的约束名称

    如何获取导致 SQLiteConstraintException 的约束的名称 在异常上调用 toString 只会给我 错误代码 19 约束失败 并且异常中没有方法可以获取原因 这使得调试我的sql变得相当困难 从版本开始3 7 17 S
  • 使用 Vega Lite 显示已经聚合的数据

    我正在尝试显示随时间变化的总和的堆积条形图 数据看起来像这样 date 12345 sumA 100 sumB 150 我将 x 轴编码为 日期 字段 我需要将日期 12345 的条形图堆叠起来 其中一部分高 100 另一部分高 以另一种颜
  • 在 C# 中从 DataGridView 更新 SQL 数据库

    有一些关于此的教程 但我假设我一定实现了错误 因为我从组合教程中遵循的代码无法正常工作 这些是教程 https youtu be i4mYXSaD4w https youtu be sB0A6FIhUM 我正在尝试创建一个显示一些基本数据的
  • 在Prolog中逐行读取文件

    我想读取一个纯文本文件并对每一行应用一个谓词 谓词包含write其输出 我该怎么做呢 您可以使用read读取流 记得调用at end of stream以确保没有语法错误 例子 读文件 pl main open myFile txt rea
  • NSAutoresizingMaskLayoutConstraint 的 UITableViewCell 舍入错误,但在 Storyboard 和 heightForRowAtIndexPath 中正确设置大小:

    我正在尝试使用 AutoLayout 在表视图单元格中配置子视图 在理想情况下 希望表视图单元格的高度足以包含所有子视图 然而 这似乎不可能 因为单元的高度是在实际创建单元之前确定的 因此 现在 我只是查看了设置的约束并计算了包含所有内容所
  • 每个项目的 Terraform 都有不同的后端

    我是 Terraform 的新手 仍在研究文档 尚未找到一种方法来适应我需要实现的特定解决方案的设置 并希望某种灵魂能够能够推动我朝正确的方向前进 我正在尝试管理一组参数化模板 这些模板部署支持我们在 GCP 中开发的新应用程序所需的一切
  • Neo4j 中带空格的全文搜索

    当 neo4j lucene 自动索引处于精确模式 默认 时 查询类型为 start n node node auto index name asfd a return n 正常工作 假设您有一个名为asdf adsf例如 但是 当将索引切
  • 使用 Docker Swarm 和覆盖网络进行组播

    我正在测试使用多播进行发现的应用程序 我创建了一个 Swarm 集群和一个network create d overlay swarm net因此容器在多个 Swarm 代理主机之间共享相同的 LAN 发现好像不行 所以我安装了tshark
  • 新版本应用部署后需要重启apache + APC吗?

    当我们部署应用程序时 我们只需创建一个新文件夹并指向它的符号链接 这样 apache 就会始终找到最新版本 然而 当我们部署并继续测试而不首先重新启动 apache 服务器时 我们会遇到奇怪的错误 我们还运行了 APC 感觉缓存与此有关 当
  • 将数据从设备复制到主机时出现无效参数错误

    我在将数据从设备复制回主机时遇到问题 我的数据排列在一个结构中 typedef struct Array2D double arr int rows int cols Array2D arr是一个 平面 数组 rows and cols描述
  • 如何将 CORS 与 grails Rest API 一起使用?

    我正在使用 grails 开发 Rest Api 它正在 localhost 8080 上运行 当我与 POSTMAN 通话时 它以 json 响应 我想使用这些数据 并在其他域上运行的网页上执行 CRUD 操作 当我尝试调用用 grail
  • 解密使用 AES-128 加密的 M3U8 播放列表,无需 IV

    我目前正在构建一个用于下载 M3U8 播放列表的应用程序 但我遇到了一个问题 如果播放列表使用 AES 128 加密 例如有这样一行 EXT X KEY METHOD AES 128 URI https website com link k
  • R-标签中的剪切函数,无需科学记数法,可在 ggplot2 中使用

    我使用 cut 和 classIntervals 对 R 中的数据进行分组 然后使用 ggplot2 进行绘制 因此 按 n 3 的分位数进行切割的基本操作如下所示 library classInt a lt c 1 10 100 1000
  • Lua关闭/程序执行结束回调

    我正在为 Lua 编写一个模块 关闭 lua 解释器时 即使用户忘记隐式调用关闭例程 它也必须运行清理例程 该模块主要是用 C 编写的 我应该使用 Lua C Api 中的哪个回调来检测程序执行结束 我唯一的想法是在代表我的模块的表上使用