【发布时间】:2021-06-22 17:02:32
【问题描述】:
我正在 lua c 中创建一个线程,但我想将其保留在 C 中,而不是使其成为环境/等中的变量。但是当我丢弃由 lua_newthread 推送的线程值时,它很快就会被垃圾收集,因此变得无用。 在这个线程中,我想运行用户传递的任意 lua 代码,允许他们使用与其他线程隔离的专有函数/变量。
有没有办法将线程/用户数据/表值标记为不可垃圾回收?
【问题讨论】:
标签: lua luac lua-c++-connection
我正在 lua c 中创建一个线程,但我想将其保留在 C 中,而不是使其成为环境/等中的变量。但是当我丢弃由 lua_newthread 推送的线程值时,它很快就会被垃圾收集,因此变得无用。 在这个线程中,我想运行用户传递的任意 lua 代码,允许他们使用与其他线程隔离的专有函数/变量。
有没有办法将线程/用户数据/表值标记为不可垃圾回收?
【问题讨论】:
标签: lua luac lua-c++-connection
不,您必须在某处引用它或禁用 GC。
使用lua_ref 来引用大部分隐藏的地方:注册表。 (debug.getregistry())
【讨论】:
这是可能的。 您可以使用 TValue 的 gcobj 作为参数添加对 gc_mark 的调用到 gc_markroots。
【讨论】: