"Rasmus Grøndahl Olsen" <zordid@bigfoot.com> writes:
[color=blue]
> 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?[/color]
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.
[color=blue]
> function wait(time) {
> while(1){
> setTimeout("break;",time);
> }
> }[/color]
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.
[color=blue]
> function wait(time) {
> var flag=0;
> while(flag=0){
> setTimeout("flag=1;",time);
> }
> }[/color]
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 -
lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'