【发布时间】:2014-06-07 21:38:16
【问题描述】:
我目前正在编写 Lua 脚本以与某些第三方产品集成。这个第三方产品同时在多个线程上调用我的 Lua 脚本,这很好。但是,当我从脚本写入日志文件时,我想确定哪个线程正在运行我的 Lua 脚本并将其写入日志文件。
这将允许我确定哪些日志条目属于一起。
非常欢迎任何关于如何正确区分 Lua 中不同线程的日志条目的想法。
【问题讨论】:
-
你说的是需要底层操作系统支持的 lua 协程还是实际的抢占式线程?
-
@greatwolf:我更希望从调用我的 LUA 的 C 代码中创建的线程获得线程 ID。但是,如果这会造成问题或变得复杂,我会选择任何其他机制来区分日志中的线程。
-
唯一的方法是从 Lua 访问底层 OS api。在 Windows 中,这将是
GetCurrentThread或GetCurrentThreadId。如果 FFI 可用,您可以使用它直接从 lua 绑定到这些函数。否则,您可能需要使用 Lua C 扩展模块公开这些函数。 -
@greatwolf ,或者您可以在另一个线程上启动新的 Lua VM 时传递并存储一些标识 ID。就像每个 Lua VM 在它的注册表或类似的东西上都有一个线程标识 ID。或者您可以将 lua_State 包装到另一个结构中,该结构将保存您生成的线程 ID。