내 프로그램의 메인 루프 내에서 내 캔버스 업데이트를 만들기 위해 자바 스크립트에서 requestAnimFrame
method을 사용하고 있습니다 :우리는 requestAnimFrame을 응용 프로그램 루프에서 '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).
내 질문 - 이벤트 루프가 처리하도록 requestAnimFrame을 응용 프로그램 루프에서 'yield'로 간주 할 수 있습니까? JavaScript가 여전히 단일 스레드라고 가정 할 수 있습니까?
* 변경 사항이 없습니다. 코드에 대한 콜백 홀더 일뿐입니다. 그리고 예, JS 여전히 단일 스레드 – zerkms
귀하의 질문은 명확하지 않다. "그것"아무것도 업데이트하지 않습니다. "캔버스가 어쨌든 실행 중일 때 왜 캔버스가 업데이트되지 않는 이유가 무엇입니까?"라고 말하면 무엇을 의미하는지 명확하지 않습니다. – zerkms
편집에 회신하도록 편집했습니다. – GameAlchemist