Случайные исключения LuaInterface
Я использую LuaInterface для написания скриптов в игре, которую делаю.
Сценарии работают довольно хорошо, но я получаю много случайных исключений.
Я сузил проблему до того места, где я вызываю функции lua из кода C#, которые вызываются из другого потока и обрабатывают сеть с помощью игрового сервера.
Я думаю, что происходит то, что код lua выполняется, и функции lua вызываются из C# из другого потока, что вызывает случайные ошибки.
Как я вызываю функции из C#:
function.Call(message);
Функция имеет тип LuaFunction, а сообщение - это пользовательский объект.
Ошибки, которые я получаю:
- Первое случайное исключение типа 'LuaInterface.LuaScriptException' произошло в LuaInterface.dll
- Ошибка при запуске lua: function
- Первое случайное исключение типа 'LuaInterface.LuaScriptException' произошло в LuaInterface.dll
- Невозможно открыть скрипт: mainmenu/console
Может ли это быть связано с запуском функций lua из потоков, отличных от потока, в котором был создан LuaVM?
2 ответа
Луа не безопасен. Вам нужно либо иметь состояние Lua для каждого потока и вызывать конкретное состояние потока, либо устанавливать блокировки вокруг любых вызовов Lua.
Проблема была действительно многопоточна, спасибо BMitch за указание на это.
Я исправил это, передав функции обработки потока сообщений с параметрами в основной поток, который затем вызывает их в методе обновления.