Я разрабатываю сервер для многопользовательской игры, где я хочу дать каждому игроку свой поток Lua, который я бы хотел заполнить некоторыми уникальными глобалами, например. имя и идентификатор игрока. В принципе, я хочу иметь возможность устанавливать локальные переменные потока из главного приложения без какого-либо дополнительного кода в реальных сценариях, которые я пишу, которые я могу использовать в течение всего сеанса воспроизведения, всякий раз, когда я вызываю функцию , Возможно ли это с Lua?Местная переменная потока
// Example of how it naturally doesn't work
var L = Lua.LuaLNewState();
Lua.LuaRegister(L, "print", WriteLine);
dostring(L, "print('hello, world')", null);
var x = Lua.LuaNewThread(L);
Lua.LuaPushLiteral(x, "charId");
Lua.LuaPushNumber(x, 123);
Lua.LuaRawSet(x, Lua.LUA_GLOBALSINDEX);
dostring(x, "print('x1 '..charId)", null); // call to a function that uses charId
var y = Lua.LuaNewThread(L);
Lua.LuaPushLiteral(y, "charId");
Lua.LuaPushNumber(y, 456);
Lua.LuaRawSet(y, Lua.LUA_GLOBALSINDEX);
dostring(y, "print('y1 '..charId)", null); // call to a function that uses charId
dostring(x, "print('x2 '..charId)", null); // I want this to still be 123
Обновление: Мое приложение многопоточное, несколько игроков могут запускать сценарии одновременно. Мое понимание настройки среды в Lua заключается в том, что она меняет ее по всему миру, что не будет работать в моем случае.
См. Также здесь: http://stackoverflow.com/questions/24356520/thread-locals-in-lua – siffiejoe
Я понимаю, что изменение среды функции глобально. Возможно, мне следовало бы это разъяснить, мы не говорим о потокобезопасном приложении здесь, задавая среду функции перед вызовом, это не вариант, так как несколько потоков могут запускать скрипты одновременно. – Mars
Код в ответе связанного сообщения заменяет глобальную среду исполняемого скрипта только один раз перед созданием любых сопрограмм. И даже это необязательно, если вы согласны с использованием 'TL.variablename' вместо простого' variablename' для доступа к локальной переменной потока. – siffiejoe