【发布时间】:2015-02-15 01:39:15
【问题描述】:
我正在编写一种用于教育目的的语言,它应该在网络浏览器中运行。该语言编译为 JavaScript。
所以存在无限循环和递归的问题。 在那一刻之前,我认为解决方案是将运行时实现为 WebWorker 和 ui 上的按钮,如果运行时间过长则终止它。
我刚刚发现,在测试我的语言时,网络工作者并没有真正被终止,通过调用:runtime.terminate();
至少在他的上一份工作完成之前,我还没有测试过如果完成会发生什么。即使在我到目前为止找到的文档中,它也声明它会立即停止执行。
因此,即使用户可以继续以这种方式工作,后台运行的工作人员也会耗尽资源并至少导致浏览器无响应。
因此,为了响应用户事件,我需要任何方法来终止执行,以防死循环或递归。由于我没有找到任何方法让 JavaScript 中的线程进入睡眠状态,所以这也不起作用,或者网络工作者是否有类似睡眠的方法?
你有什么建议吗?
【问题讨论】:
-
修复你的无限递归循环。
-
@RobertHarvey,我认为你误解了 OP 想要做什么。他/她正在编写一个编译器。语言的用户会创建无限的递归循环。
-
是的,你是对的,我正在编写编译器,所以我无法阻止它们,我只是不希望用户最终浏览器挂起......
标签: javascript sleep terminate