【发布时间】:2012-05-08 06:54:37
【问题描述】:
我使用 lua 接口在我的 C# 程序中获得 lua 支持,如果用户提交这样的代码,工作线程将冻结
while true do end
我有一种方法可以检测无限循环是否正在运行,但我需要一种从 Worker 线程中退出 DoString 方法的好方法。有什么想法吗?
编辑:@kikito,是的,我正在检测类似的东西。我遇到的问题是我找不到杀死 DoString 方法的干净方法,看起来 Lua 接口主类(Lua)有一些静态依赖项,因为如果我在我的实例上执行 lua.Close(); 它将中止 DoString 方法,但是下次我实例化一个 lua 类 new Lua(); 时,它会崩溃,说一些关于保护性内存的事情
edit:显示我的 .Close 代码的功能分支 https://github.com/AndersMalmgren/FreePIE/tree/detect-and-recover-infite-lua-loop
【问题讨论】:
-
google了30秒后发现LUA支持hook事件:'有四种事件可以触发hook:每次Lua调用函数时都会发生call事件;每次函数返回时都会发生返回事件;当 Lua 开始执行新的代码行时发生 line 事件;和计数事件发生在给定数量的指令之后'。你去吧。对于解释器实例,我通常会在调用解释器的线程捕获的“OnSomething”事件中引发异常。不过,不知道 Lua。
-
任何人都有针对 C# 的 Lua 交互的解决方案?
-
最初的 Lua 实现(用 C 语言编写)应该在
close中存在(它是可重入的,并且状态被完全封装)。如果 C# 没有,请提交错误。 (否则你总会有一些代码遇到崩溃,例如extremely long (decades or more) running string operations,钩子对此无济于事。) -
抱歉回复晚了,假期.. C# 包装器不是一个非常活跃的项目:/ 但会提出问题,谢谢
-
我做了一个功能分支,以便您可以测试代码或查看我是否犯了任何错误github.com/AndersMalmgren/FreePIE/tree/…