Scripting 多个脚本和Lua线程出现问题
当我有两个具有相同函数名和参数的脚本在不同的线程中运行时,第二个线程会覆盖第一个线程的定义,第一个线程的状态会被垃圾回收Scripting 多个脚本和Lua线程出现问题,scripting,multithreading,lua,Scripting,Multithreading,Lua,当我有两个具有相同函数名和参数的脚本在不同的线程中运行时,第二个线程会覆盖第一个线程的定义,第一个线程的状态会被垃圾回收 // My thread instancing function lua_State* LuaInstance::RunInstance(const std::string& fileName) { lua_State* L = lua_newthread(m_state); // Give new thread it's own global table
// My thread instancing function
lua_State* LuaInstance::RunInstance(const std::string& fileName)
{
lua_State* L = lua_newthread(m_state);
// Give new thread it's own global table
lua_newtable(L);
lua_newtable(L);
lua_pushliteral(L, "__index");
lua_pushvalue(L, LUA_GLOBALSINDEX); // Original globals
lua_settable(L, -3);
lua_setmetatable(L, -2);
lua_replace(L, LUA_GLOBALSINDEX); // Replace LB's globals
// Run script off new thread
luaL_dofile(L, fileName.c_str());
return L;
}
我基本上是想得到它,这样我就可以像这样调用多个脚本(对于游戏引擎):
正如手册中所说,新线程创建的状态与其他线程共享全局状态。如果需要每个线程的存储,则必须创建一个特殊的键以在注册表中使用 从手册(我的重点):
lua_State*lua_新线程(lua_State*L)代码>
创建一个新线程,将其推送到堆栈上,并返回指向
表示此新线程的lua_状态返回的新状态
此函数与原始状态共享所有全局对象(例如
作为表),但具有独立的执行堆栈。没有
用于关闭或销毁线程的显式函数。线程是主题
垃圾收集,就像任何Lua对象一样
我的实例化函数没有给线程提供它自己的空全局状态吗;国家是共享的;只有执行堆栈是新的。请参阅编辑。这确实需要一个单独的问题,但您可以尝试返回init函数,例如,返回函数(self)。。。做些事情。。。结束
。然后可以调用dofile(“script1.lua”)(self)
。你知道向上投票按钮是怎么工作的吗?
-- Script 1
function Init(self)
-- Do some stuff
end
-- Script 2
function Init(self)
-- Do some other stuff
end