【发布时间】:2016-01-05 03:17:06
【问题描述】:
我有以下 lua 脚本:
mydata={}
function update(val)
mydata["x"] = val
if (val == 10)
-- Call C-Api(1)
else
--Register callback with C when free or some event happens
register_callback(callme)
end
function callme()
end
基本上,我希望在我的 C 程序/进程中运行此脚本的两个实例,而不必为每个脚本创建新的 LUA 状态。我想从一个实例调用 val = 10 的函数 update() 并从另一个实例调用 val = 20 的函数 update() 。从第二个实例开始,它注册一个回调函数并等待被调用。
基本上,脚本文件是我想要实现的一种规则。 系统上的几个事件可以触发此规则或脚本文件。我想根据触发它的事件来处理这个规则。可能有多个事件触发此脚本同时运行。所以我需要让这个脚本的多个实例运行,并根据触发它的事件类型来区分。
总而言之,我希望每个调用者都有单独的 mydata 实例
我想实现这样的目标。我读到了一些地方,我们应该能够运行 lua 脚本的多个实例,而不必通过在加载脚本之前加载新环境来创建新的 lua 实例
但我无法找到确切的细节。
身体能帮忙吗?
【问题讨论】:
-
该脚本只是创建了一个表并定义了一个函数。您不需要多次运行它。而且您不想这样做,否则第二次运行会破坏原始运行中的表。您可以从运行在 lua 状态的任何其他东西调用该函数。如果您需要两个线程同时执行此操作,那么您需要同步它们对 lua 状态的访问。 究竟你想在这里做什么?
-
感谢您的意见。我提到的表格只是一个示例。基本上我正在尝试创建一个 lua 脚本文件。这个文件作为一个规则,意味着它规定了事情应该如何工作。在我的大系统中,会发生一些事件并触发此规则。这意味着我需要针对该事件运行此 RULE 脚本。因此可能有多个事件同时触发相同的规则脚本。所以这意味着我需要让每个触发它的事件运行这个 lua 规则脚本的多个实例。假设 MyData.["x"] = event-id
-
如果您希望
mydata可共享,那么您需要一个实例。如果要使用相同的全局名称但不共享,请创建多个 Lua 状态。如果您不需要它可共享,那么只需将其设为本地即可。您要解决的实际问题非常不清楚。 -
谢谢泥。但我不想共享 mydata,也不想创建多个 lua 状态。有可能做到这一点吗?为了能够在多个实例上运行相同的脚本,并且每个实例都有不同的 mydata 副本?
-
多次调用该脚本将永远做你想做的事。如果您的意思是您希望能够多次调用
update函数,那是另一个问题。如果这就是您的意思,您是否希望在呼叫者之间共享mydata(您如何定义呼叫者)?您是否想要为每个调用者提供单独的mydata表(同样,您如何定义调用者)?您的调用者(无论他们是什么)需要在 lua 状态下共享任何内容吗?因为如果不是,并且您想要线程调用者或任何东西,那么多个 lua 状态 是 您想要的。你真的需要澄清你的问题。