Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如何识别Lua脚本正在哪个线程上运行?_Logging_Lua - Fatal编程技术网

Logging 如何识别Lua脚本正在哪个线程上运行?

Logging 如何识别Lua脚本正在哪个线程上运行?,logging,lua,Logging,Lua,我目前正在开发Lua脚本,以便与一些第三方产品集成。这个第三方产品同时在多个线程上调用我的Lua脚本,这很好。但是,当我从脚本写入日志文件时,我想确定哪个线程正在运行我的Lua脚本,并将其写入日志文件 这将允许我确定哪些日志条目属于同一个条目 任何关于如何正确区分Lua中不同线程的日志条目的想法都是非常受欢迎的。表的默认表示形式包含表的(内存)地址。它保证在同一进程上运行的不同Lua VM之间是唯一的 您可以利用此漏洞为每个线程生成唯一的ID: localunique_id=tostring({

我目前正在开发Lua脚本,以便与一些第三方产品集成。这个第三方产品同时在多个线程上调用我的Lua脚本,这很好。但是,当我从脚本写入日志文件时,我想确定哪个线程正在运行我的Lua脚本,并将其写入日志文件

这将允许我确定哪些日志条目属于同一个条目

任何关于如何正确区分Lua中不同线程的日志条目的想法都是非常受欢迎的。

表的默认表示形式包含表的(内存)地址。它保证在同一进程上运行的不同Lua VM之间是唯一的

您可以利用此漏洞为每个线程生成唯一的ID:

localunique_id=tostring({}):sub(8)——提取“地址”部分
打印(唯一标识)
-->输出0x7f876b608b00


作为旁注,这是一种推荐的生成用于全局Lua的唯一键的方法

你说的是lua协程还是需要底层操作系统支持的实际抢占线程?@greatwolf:我更喜欢使用调用我的lua的C代码中创建的线程的线程id。但是,如果这会造成问题或使问题变得复杂,我会选择任何其他机制来区分日志中的线程。唯一的方法是从Lua访问底层OS api。在windows中,这将是
GetCurrentThread
GetCurrentThreadId
。如果FFI可用,您可以使用它直接从lua绑定到这些函数。否则,您可能需要使用Lua C扩展模块公开这些函数。@greatwolf,或者您可以在另一个线程上启动新的Lua VM时传递并存储一些标识id。就像每个luavm在它的注册表上都有一个线程标识ID或者类似的东西。或者您可以将lua_状态包装到另一个结构中,该结构将保存您生成的线程ID。此代码导致异常:错误的参数#2到'sub'(预期为数字,没有值)。我已将代码更改为:local unique_ID=tostring({}),并将其用作string.sub(unique_ID,8)