0

作成中のゲームでスクリプトを作成するために LuaInterface を使用しています。

スクリプトは非常にうまく機能しますが、どういうわけか、ランダムな例外がたくさん発生します。

ゲームサーバーとのネットワークを処理する別のスレッドから呼び出される C# コードから lua 関数を呼び出す場所に問題を絞り込みました。

何が起こっていると思いますが、lua コードが実行されており、lua 関数が C# から別のスレッドから呼び出されているため、ランダム エラーが発生しています。

C# から関数を呼び出す方法:

function.Call(message);

function は LuaFunction 型で、 message はカスタム オブジェクトです。

私が得ているエラー:

  • タイプ 'LuaInterface.LuaScriptException' の初回例外が LuaInterface.dll で発生しました
  • lua の実行中にエラーが発生しました: 関数
  • タイプ 'LuaInterface.LuaScriptException' の初回例外が LuaInterface.dll で発生しました
  • スクリプトを開けません: mainmenu/console

LuaVM が作成されたスレッド以外のスレッドから lua 関数を実行することに関係があるのでしょうか?

4

2 に答える 2

1

Lua はスレッドセーフではありません。スレッドごとに Lua 状態を保持してスレッド固有の状態を呼び出すか、Lua 呼び出しの周りにロックを配置する必要があります。

于 2011-08-30T14:16:37.693 に答える
0

それを指摘してくれた BMitch に感謝します。

メッセージ スレッドがパラメーターを含む関数をメイン スレッドに渡し、メイン スレッドが更新メソッドでそれらを呼び出すようにすることで、この問題を修正しました。

于 2011-08-30T16:08:46.450 に答える