"Rasmus Grøndahl Olsen" <zo****@bigfoot.com> writes:
I have tried to write a wait function but it seems like it will not brake
the while loop. I tried two different solutions.
Can anyone tell me what I am doing wrong, and come with another suggestion?
If I call the function like this: wait(500); it should wait 500ms right?
No.
setTimeout doesn't dealy execution. It schedules the argument code to
be executed at a later time, and then continues with the current code.
function wait(time) {
while(1){
setTimeout("break;",time);
}
}
The code "break" is not executed as part of the current context, but as
fresh code in the global context. It has no way of breaking a while
loop that it is not inside.
function wait(time) {
var flag=0;
while(flag=0){
setTimeout("flag=1;",time);
}
}
This could work, except that the flag variable is local, and the
scheduled code is executed in a different context.
No need to make more than one setTimeout.
Try either:
var flag = false;
function wait(time) {
setTimeout("flag = true",time)
while(!flag){};
}
or
function wait(time) {
var flag = false;
setTimeout(function(){flag = true;},time);
while(!flag){};
}
In both cases, you spend all available processor power on a busy loop
that does nothing. That (called "busy waiting") is bad style in any
language.
Instead of using a wait function, you should reschedule the remainder
of your code instead.
// blah blah code
wait(500);
// blah blah more code
should be
// blah blah code
setTimeout(function(){
// blah blah more code
},500);
Ofcourse, if you plan on returning a result, it will need more fixing.
/L
--
Lasse Reichstein Nielsen -
lr*@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'