Случайные исключения 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 за указание на это.

Я исправил это, передав функции обработки потока сообщений с параметрами в основной поток, который затем вызывает их в методе обновления.

Другие вопросы по тегам