whats wrong with this wait function?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Rasmus Grøndahl Olsen

    whats wrong with this wait function?

    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("bre ak;",time);
    }
    }

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


  • Lasse Reichstein Nielsen

    #2
    Re: whats wrong with this wait function?

    "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("bre ak;",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("fla g=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("fla g = true",time)
    while(!flag){};
    }

    or

    function wait(time) {
    var flag = false;
    setTimeout(func tion(){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(func tion(){
    // 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/rasterTriangleD OM.html>
    'Faith without judgement merely degrades the spirit divine.'

    Comment

    • Evertjan.

      #3
      Re: whats wrong with this wait function?

      Rasmus Grøndahl Olsen wrote on 27 okt 2003 in comp.lang.javas cript:
      [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?
      >
      > function wait(time) {
      > while(1){
      > setTimeout("bre ak;",time);
      > }
      >}
      >
      > function wait(time) {
      > var flag=0;
      > while(flag=0){
      > setTimeout("fla g=1;",time);
      > }
      >}
      >[/color]

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

      try this:

      <script>

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

      main()

      </script>



      --
      Evertjan.
      The Netherlands.
      (Please change the x'es to dots in my emailaddress)

      Comment

      Working...