可能重复:
防止 Lua 无限循环
这是一个针对 C#(Lua 接口)的 Lua 特定问题,它不像在原生 C Lua 中那样工作,所以如果您没有 Lua C# 的经验,请三思而后行,如果您的回答对我有帮助,谢谢
所以问题是如果用户提供这样的脚本
while (true) do end
我怎么在没有 Lua 死在我身上的情况下干净地中止它?我尝试了很多方法,仅从单独的线程调用lua.Close()只会在调用 Lua API(尝试索引 nil 值)错误时给您一个不受保护的错误,问题的根源是 Lua 不是线程安全,并且由于我必须从一个单独的线程调用 close(主线程正忙于为 DoString 调用提供服务),所以它有点 22 问题。我尝试添加一个调试钩子,并检查 DoString 线程和钩子之间的线程 ID 是否相同,它们是相同的,因此钩子中执行的任何内容都在 DoString 线程上执行。这无济于事,仍然出现异常。你是如何在 Lua C# 中中止 DoString 的!?
谢谢
编辑
更进一步,如果我处理 lua 类,我会在运行无限DoString的线程中得到一个异常,在 VStudio 的调试中,我可以抓住它并恢复。但是,如果我在调试或发布中运行 exe,我有时无法恢复并崩溃!?我从 DoString 线程得到的错误是
尝试读取或写入受保护的内存。这通常表明其他内存已损坏。