Случайные исключения LuaInterface - PullRequest
0 голосов
/ 30 августа 2011

Я использую 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 ]

1 голос
/ 30 августа 2011

Lua не безопасен для потоков.Либо вам необходимо иметь состояние Lua для каждого потока и вызывать конкретное состояние потока, либо устанавливать блокировки вокруг любых вызовов Lua.

0 голосов
/ 30 августа 2011

Проблема действительно была многопоточностью, спасибо BMitch за указание на это.

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

...