目的はわかりませんが、中断する必要があります
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の命令のように、すべてを小さなチャンクに分割できます:)