我需要让函数运行固定的秒数,然后终止。我可以使用jQuery或web worker,但我尝试直接使用它。
寻求帮助现在可行:
startT = new Date().getTime();
i = 1;
while(true){
now = new Date().getTime();
if( (now - startT) > 100) {
break;
}
i++;
}
alert(i);
答案 0 :(得分:3)
您提出的方法不起作用,因为Javascript(大部分)是单线程的 - 循环在无限循环中开始,因此setTimeout
处理程序永远不会被调用,因此keepGoing
永远不会被设置,所以循环无法完成。
确定函数完成的绝对时间是最简单的,并且经常(即不是每次迭代)检查当前时间是否已经过了该点。
选择一些迭代,让您在经过时间的测试效率和准备让该函数具有的“加班时间”之间做出合理的折衷。
答案 1 :(得分:1)
Count开始无限循环,你的代码永远不会到达setTimeout()。
答案 2 :(得分:1)
三个问题:
setTimeout
将无法联系,因为count
永远不会完成alert
应在count
后while
内或setTimeout
回调中调用。解决这些问题,您的代码应该有效。不过,我可能已经预先设定了结束日期,并与while
中的该日期进行比较。
答案 3 :(得分:0)
我不知道目的是什么,但你必须打断
function count() {
while(keepGoing) {
i = i+1;
}
}
暂时让keepGoing
有机会在同时运行的其他地方进行更改。你也永远不会这样做:
while(keepGoing) {
i = i+1;
}
你完全阻止一切的主题... 您必须将函数的工作分成小块,并使用setTimeout或setInterval以小批量运行它,如下所示,尽可能接近您想要的:
var piece_n=0;
var keepGoing = true;
var interval_id = setInterval(function () {
if(keepGoing){
//do_a_short_piece_of_work(piece_n);
piece_n++;
}else{
clearInterval(interval_id);
}
},500); //ticking every half second
setTimeout(function () { keepGoing = false; }, 10000); //run for a small bit more than 10 to 10.5 seconds + do_a_short_piece_of_work() execution time
如果你需要10秒钟而不需要其他时间,你将需要在一系列setTimeout中进行调整,你需要提前知道一点(超过下一个滴答),这样你就可以在确切的时间设置最后一个setTimeout (咨询当前日期和保存的初始日期)。 一切都可以分成更小的块,比如cpu的说明:)