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)
正如手册中所说,新线程创建的状态与其他线程共享全局状态.如果您需要每线程存储,则必须创建一个在注册表中使用的特殊密钥.
从手册(强调我的):
lua_State *lua_newthread (lua_State *L);创建一个新线程,将其推送到堆栈上,并返回一个指向表示此新线程的lua_State的指针.此函数返回的新状态与原始状态共享所有全局对象(例如表),但具有独立的执行堆栈.没有显式函数来关闭或销毁线程.与任何Lua对象一样,线程可以进行垃圾收集.
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |