我已经使用 LuaObjCBridge 将 Lua 嵌入到一个 Objective-C 应用程序中。如果需要太多时间(无限循环?),我需要知道如何停止 Lua 进程。
在单独的线程中运行它会有所帮助吗?
我已经使用 LuaObjCBridge 将 Lua 嵌入到一个 Objective-C 应用程序中。如果需要太多时间(无限循环?),我需要知道如何停止 Lua 进程。
在单独的线程中运行它会有所帮助吗?
执行此操作的常用方法是使用lua_sethook来安排每个count
VM 指令的回调;当回调lua_Hook函数在过多时间后发生时,您的钩子函数可能会引发错误,强制控制受保护的调用。
Doug 的回答已经提供了限制正常 lua 代码执行所需的默认值。如果出于安全原因需要对此进行限制,您应该知道使用 lua 库调用的已知方法(例如字符串模式匹配函数)来创建实用的无限循环。指令计数钩子不会为您捕获这些,因为在执行 c 函数调用时 lua 指令计数不会增加。对于这种口径的解决方案,您需要操作系统级别的限制(单独的进程,来自 SIGALRM 的中断?)