我有一个复杂的 JavaScript 函数,可能需要 1 秒或很多分钟才能发送答案。所以我创建了一个正在工作的 Worker,我从 Swift 中的 UIWebView 调用这个函数(stringByEvaluatingJavaScriptFromString)。我只等待 5 秒(在相同的 Javascript 中创建超时),之后我终止工作程序(job.terminate()),然后使用其他参数启动另一个工作程序(更简单),这在显示中只需要 1 秒答案。问题是,即使在终止信号之后,第一个工作人员似乎仍在后台运行。如图所示,WebCore: Worker 的 CPU 使用率很高。我怎样才能真正终止该员工?
job = new Worker("main.js");
var t = setTimeout(function(){
stop();
logNode.innerText = 'NULL';
},5000);
function stop() {
job.terminate();
job = undefined;
}
(main.js):
importScripts('dist/algorithm.js');
var lp;
self.addEventListener('message', function(e) {
...
...
终止工作程序(并确保这一点)的最简单方法是注入一个布尔表达式,使代码“异常退出”其主循环(或者如果代码中只有 1 或 2 个瓶颈,甚至可以正常返回) .)。您可以在 catch 块中执行任何所需的清理,然后让它自然退出。
我个人讨厌用终止或终止等函数来结束线程,因为它会使事情处于未定义的状态
对终止的调用可能会被忽略或稍后排队,因为工作线程正在使用它可以使用的所有资源,没有时间进行消息处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)