多个脚本和Lua线程的问题

Reg*_*gie -1 scripting lua multithreading

当我有两个具有相同功能名称和参数的脚本在不同的线程中运行时,支持不同的环境,第二个线程最终覆盖第一个线程的定义,第一个线程的状态被垃圾收集!

// 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;
}
Run Code Online (Sandbox Code Playgroud)

我基本上试图得到它,以便我可以调用这样的多个脚本(对于游戏引擎):

-- Script 1
function Init(self)
  -- Do some stuff
end


-- Script 2
function Init(self)
  -- Do some other stuff
end
Run Code Online (Sandbox Code Playgroud)

Nor*_*sey 5

正如手册中所说,新线程创建的状态与其他线程共享全局状态.如果您需要每线程存储,则必须创建一个在注册表中使用的特殊密钥.

从手册(强调我的):

lua_State *lua_newthread (lua_State *L);

创建一个新线程,将其推送到堆栈上,并返回一个指向表示此新线程的lua_State的指针.此函数返回的新状态与原始状态共享所有全局对象(例如表),但具有独立的执行堆栈.没有显式函数来关闭或销毁线程.与任何Lua对象一样,线程可以进行垃圾收集.

  • 当你没有解决问题时,你没有得到投票! (2认同)