Я использую requestAnimFrame
method в JavaScript, чтобы сделать мое обновление холста в основном цикле моей программы:Можем ли мы рассмотреть requestAnimFrame a 'yield' в цикле приложения, чтобы разрешить цикл события?
window.requestAnimFrame = (function(callback) {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000/60);
};
})();
function animate() {
requestAnimationFrame(animate);
//var runcount = 100;
//for (var i=0;i<=100;i++) {
draw();
// if (runcount === i)
// alert("Completed program loop");
// }
}
Что происходит в том, что my program that only updated the canvas after my main loop had run for 100 итераций, а затем остановились. После добавления method above into my main loop, suddenly I get canvas updates в каждый цикл моей программы.
Тот факт, что полотно не обновлялось до завершения моей программы, заставило меня подумать, что обновление холста работает в другом потоке, который не получил приоритет. (Но мы знаем, что JavaScript is single-threaded).
Мой вопрос - Можем ли мы рассмотреть запросAnimFrame a 'yield' в цикле приложения, чтобы разрешить цикл обработки событий? Могу ли я считать, что JavaScript однопоточный?
Это не * изменение * ничего, это всего лишь обратный звонок для вашего кода. И, да, JS по-прежнему однопоточный – zerkms
ваш вопрос непонятен. «он» ничего не обновляет. Непонятно, что вы имеете в виду, говоря «почему он не обновил холст, когда он работал в любом случае»? – zerkms
я отредактировал, чтобы ответить на ваши изменения. – GameAlchemist