whats wrong with this wait function?

  • Thread starter Rasmus Grøndahl Olsen
  • Start date
R

Rasmus Grøndahl Olsen

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?

function wait(time) {
while(1){
setTimeout("break;",time);
}
}

function wait(time) {
var flag=0;
while(flag=0){
setTimeout("flag=1;",time);
}
}
 
L

Lasse Reichstein Nielsen

Rasmus Grøndahl Olsen said:
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
 
E

Evertjan.

Rasmus Grøndahl Olsen wrote on 27 okt 2003 in comp.lang.javascript:
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?

function wait(time) {
while(1){
setTimeout("break;",time);
}
}

function wait(time) {
var flag=0;
while(flag=0){
setTimeout("flag=1;",time);
}
}

That is not the way JS works, even with while(flag==0)

try this:

<script>

function main() {
// do this
// do that
setTimeout("main2()",1000); // 1 second
}
function main2() {
// do this
// do that
setTimeout("main3()",2000); // 2 seconds
}
function main3() {
// do this
// do that
setTimeout("main4()",60000); // 1 minute
}
function main4() {
// do this
// do that
setTimeout("main2()",2000); // 2 seconds, then loop to main2
}

main()

</script>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top