Mic: gibt es ein Sleep() ???

Halli Hallo

Ich habe das Problem, dass ich bei einer Javascript funktion eine Verzögerung einbauen muss. Habe es mit setTimeout("",zeit) versucht funktioniert aber nicht. läuft genau gleich weiter. Jetzt ist meine Frage ob es eine Funktion gibt mit der ein Timeout (Sleep) erzwungen werden kann. Das Abarbeiten der funktion muss in dieser Zeit unterbrochen sein und die Zeit sollte in Millisekunden abgegeben werden können.

Hoffe es kann mir jemand helfen...

  1. Hi !
    Guck dir mal das hier an !

    <HTML>
    <head>
    <script>
    <!--
    function wait(delay){
    string="pauseforalert("+delay+");";
    setTimeout(string,delay);
    }
    function pauseforalert(delay){
    alert("Ok "+delay/1000+" seconds have elapsed");
    }
    // -->
    </script>
    </HEAD>
    <BODY>
    <a href="javascript:void()" onClick="wait(1000);">click here and wait 1 sec</a><BR>
    or<BR>
    <a href="javascript:wait(2000)">click here and wait 2 secs</a><BR>

    </BODY>
    </HTML>

    1. Danke erstmal für deine Hilfe.

      Mein Codeteil sieht folgendermassen aus und ist in einer Funktion:

      function waitfor(milisecs)
      {
        window.setTimeout("",milisecs);
      }

      messagetowrite = "";
      for(charcounter=0;charcounter<aktualmessage.length;charcounter++)
      {
        newchar = aktualmessage.substr(charcounter,1);
        messagetowrite = messagetowrite+newchar;
        document.getElementById("msg"+messagecounter).innerHTML = messagetowrite;

      waitfor(80);
      }
      waitfor(500);

      warum funktioniert das nicht?

      1. Hallo,

        setTimeout startet ein Unterprogramm zeitverzögert. Der Programmablauf selbst wird nicht angehalten. Für dein Problem musst du das Unterprogramm in zwei Teile zerlegen, und der 1. Teil ruft am Ende den 2. mit setTimeout auf.

        Gruß, Jürgen

        1. Super... ok danke... dann kann ich noch lange rum probieren... werde es jetz so lösen, dass ich die Zeit an der die Funktion ausgeführt werden soll in einer Variable gespeichert wird und immer neu berrechnet wird, somit kann ich eine WRITEMESSAGE (dich ich noch schreibe) mehrmals zeitversetzt starten. Somit sollte es auch funktionieren.

      2. Hallo Mic,

        warum funktioniert das nicht?

        setTimeout() führt den Code, der der Funktion übergeben wurde, verzögert aus. Das Programm wird aber nicht angehalten. Durch setTimeout entsteht also ein 2. Thread, der gleichzeitig ausgeführt wird.
        Unterbrechen kann man mit Javascript nicht; weshalb ist mir auch nicht ganz klar.

        Grüße

        Daniel

  2. Ich habe das Problem, dass ich bei einer Javascript funktion eine Verzögerung einbauen muss. Habe es mit setTimeout("",zeit) versucht funktioniert aber nicht. läuft genau gleich weiter. Jetzt ist meine Frage ob es eine Funktion gibt mit der ein Timeout (Sleep) erzwungen werden kann. Das Abarbeiten der funktion muss in dieser Zeit unterbrochen sein und die Zeit sollte in Millisekunden abgegeben werden können.

    Du bist sicher, dass du sowas brauchst?
    Oft ist dies nur ein workaround, weil jemand onload nicht kennt und Probleme hat das noch nicht alle Elemente einer Seite geladen sind.

    Wenn du wirklich eine Pause machen willst:

    function pause(zeit)
    {
        if(!zeit) return;
        var starttime= (new Date).getTime();
        while (starttime + zeit > (new Date).getTime() ){;}
    }

    ist aber keine besonders elegante Lösung, da auf manchen System 100% CPU Leistung verbraten werden.

    Struppi.