重複の可能性:
Lua の無限ループを防ぐ
これは C# (Lua インターフェイス) 固有の質問です。ネイティブ C Lua のようには機能しません。そのため、Lua C# の経験がない場合は、回答が役立つかどうかよく考えてください。ありがとうございます。
したがって、問題は、ユーザーがこのようなスクリプトを提供した場合です
while (true) do end
Luaが私に死ぬことなく、どうやってそれをきれいに中止するのですか? 私は多くのアプローチを試しましたが、別のスレッドからlua.Close()を呼び出すだけで、Lua API の呼び出しで保護されていないエラーが発生するだけです (nil 値にインデックスを付けようとする)エラー、問題の原因は Lua ではないことですスレッド セーフであり、別のスレッドから close を呼び出す必要があるため (メイン スレッドは DoString 呼び出しでビジー状態です)、ちょっとした問題です。デバッグフックを追加しようとしましたが、DoString スレッドとフックの間でスレッド ID が同じであることも確認しました。それらは同じです。つまり、フックで実行されたものはすべて DoString スレッドで実行されます。これは役に立ちませんが、それでも例外が発生します。どうやって ... Lua C# で DoString を中止しますか!?
ありがとう
編集
もう少し進んで、lua クラスを破棄すると、無限のDoStringを実行しているスレッドで例外が発生します。VStudio からのデバッグでは、これをキャッチして回復できます。しかし、デバッグまたはリリースでexeを実行すると、回復できずにクラッシュすることがあります!? DoStringスレッドから得られるエラーは
保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。