Andreas Korthaus: Gibts in Javascript sowas wie sleep()?

Hallo!

in PHP gibt es ja sleep($sekunden), wodurch das Script $sekunden lang angehalten wird. Gibt es sowas auch in Javascript? Ich will einfach erreichen das der Browser für eine oder 2 Sekunden gar nichts macht.

Was ich kenne ist window.setTimeout("Hinweis()",600000); nur ist das leider immer an eine Funktion gekoppelt. Das brauche ich ja gar nicht. Oder soll ich einfach eine leere Funkiton machen:

function hinweis() {
    // halt nichts!
}

Oder geht das irgendwie anders?

Grüße
Andreas

  1. in PHP gibt es ja sleep($sekunden), wodurch das Script $sekunden lang angehalten wird. Gibt es sowas auch in Javascript? Ich will einfach erreichen das der Browser für eine oder 2 Sekunden gar nichts macht.

    Was ich kenne ist window.setTimeout("Hinweis()",600000); nur ist das leider immer an eine Funktion gekoppelt. Das brauche ich ja gar nicht. Oder soll ich einfach eine leere Funkiton machen:

    Hallo Andreas,

    was ist Dein _eigentliches_ Anliegen. Normalerweise tut der Browser nach dem Laden der Seite nichts, es sei denn es steht gerade ein Script zur Bearbeitung an. Du willst doch ganz sicher nicht wirklich "2 Sekunden nichts" tun, sondern Du wíllst doch "in 2 Sekunden etwas" tun, oder ?

    Ich vermute, Deine Problemstellung ist einfach umzuformulieren, so dass Du mit dem setTimeout() Befehl gut zurecht kommen müsstest. Genaueres kann man aber erst sagen, wenn Du uns das Problem genauer schilderst.

    Ciao
    Hans-Peter

    1. Hi!

      was ist Dein _eigentliches_ Anliegen. Normalerweise tut der Browser nach dem Laden der Seite nichts, es sei denn es steht gerade ein Script zur Bearbeitung an. Du willst doch ganz sicher nicht wirklich "2 Sekunden nichts" tun, sondern Du wíllst doch "in 2 Sekunden etwas" tun, oder ?

      Doch. Es handelt sich um ein PHP-Script welches per FTP einige Dateien auf einen anderen FTP-Server kopiert. Da dieser Vorgang durchaus einige Zeit dauern kann, schicke ich aus PHP nach jeder hochgeladenen Datei mit flush() ein Javascript an den Browser, welches eine "status"-Ebene verändert(siehe </?m=138246&t=25186>). Jetzt will ich aber verhindern, das der aktuelle Status manchmal nur für Millisekunden angezeigt wird, sondern hätte gerne eine Art "Warteschlange", wo ich jedem Javascript eine mindest-Anzeigedauer zuweisen kann.

      Ich vermute, Deine Problemstellung ist einfach umzuformulieren, so dass Du mit dem setTimeout() Befehl gut zurecht kommen müsstest. Genaueres kann man aber erst sagen, wenn Du uns das Problem genauer schilderst.

      Das Problem bei Timeout ist, wenn ich jedem Javascript einen Timeout zuweise kommen alle halt x Millisekunden später aber im selben Abstand. Ich könnte zwar den timeout langsam erhöhen aber das ist auch nicht wirklich gut da teilweise eh schon längere Pausen durch eine längeren Upload vorkommen. Wie sollte ich das dann bemessen?

      Viele Grüße
      Andreas

      1. Hi,

        Doch. Es handelt sich um ein PHP-Script welches per FTP einige Dateien auf einen anderen FTP-Server kopiert. Da dieser Vorgang durchaus einige Zeit dauern kann, schicke ich aus PHP nach jeder hochgeladenen Datei mit flush() ein Javascript an den Browser, welches eine "status"-Ebene verändert(siehe </?m=138246&t=25186>). Jetzt will ich aber verhindern, das der aktuelle Status manchmal nur für Millisekunden angezeigt wird, sondern hätte gerne eine Art "Warteschlange", wo ich jedem Javascript eine mindest-Anzeigedauer zuweisen kann.

        dieser Vorgang hat nichts mit HTTP zu tun, deswegen ist es falsch, die Lösung in für den Einsatz in HTTP geschaffenen Techniken zu suchen. Baue Dir ein Java-Applet oder irgendetwas ähnliches, gehe eine Verbindung über IRC oder so (vielleicht sogar gleich über FTP) ein.

        Cheatah

        1. Hallo!

          dieser Vorgang hat nichts mit HTTP zu tun, deswegen ist es falsch, die Lösung in für den Einsatz in HTTP geschaffenen Techniken zu suchen. Baue Dir ein Java-Applet oder irgendetwas ähnliches, gehe eine Verbindung über IRC oder so (vielleicht sogar gleich über FTP) ein.

          1. Kann ich kein Java.
          2. Wieso soll ich eine Verbindung über IRC/FTP eingehen? Es geht mir nur um die Darstellung. Ich rufe im Browser ein PHP-Script auf, welches selbst eine FTP-Verbindung zu einem anderen Server herstellt. Was soll mir da noch ne FTP-Verbindung bringen? Und der Vorgang hat sehr wohl was mit HTTP zu tun da ich es nunmal gewöhnlich so halte Webseiten über http zu übertragen. Ob ich jetzt in PHP beeinflusse das die Pakete(die sowieso übertragen werden) in einem bestimmten Abstand übertragen werden, was ist daran verwerflich? Ich weiß das das nicht optimal ist, aber mir stehen keider keine besseren Möglichkeiten zur Verfügung. Und es klappt ja wunderbar, ich würde nur noch gerne eine Pause beim Ausführen der Javascripte einlegen können.

          Grüße
          Andreas

          1. Hi,

            1. Kann ich kein Java.

            ich auch nicht.

            1. Wieso soll ich eine Verbindung über IRC/FTP eingehen?

            Weil HTTP für solche Dinge weder geschaffen noch geeignet ist. Entsprechend gibt es auch keine vorgesehenen oder wenigstens unproblematischen Funktionen, die auch nur annähernd das bewerkstelligen können, was Du willst.

            Ich rufe im Browser ein PHP-Script auf, welches selbst eine FTP-Verbindung zu einem anderen Server herstellt. Was soll mir da noch ne FTP-Verbindung bringen?

            Eine beständige Verbindung.

            Und der Vorgang hat sehr wohl was mit HTTP zu tun

            Du gehst derzeit über HTTP. Das was Du tust ist HTTP aber derartig fremd, dass es ein Wunder ist, wenn (nicht "dass"!) es fehlerfrei läuft.

            Ob ich jetzt in PHP beeinflusse das die Pakete(die sowieso übertragen werden) in einem bestimmten Abstand übertragen werden, was ist daran verwerflich?

            Du belastest Server, Client und alle dazwischenliegenden Systeme auf eine Weise, die diese weder erwarten noch verdienen.

            Und es klappt ja wunderbar,

            Diese Beobachtung bezieht sich nur auf einen winzigen Teil der Realität.

            Cheatah

  2. Hallo Andreas,

    versuch's doch mal auf die brutale Tour.
    Ich weiß, schön ist anders.

    Gruß
    Hans35

    <html><head><title> Test</title></head>
    <script language="JavaScript"><!--
    function warten(dt)
    {
      var dt=10 // WarteZeit in Sekunden

    var jetzt = new Date()
      var t0 = (jetzt.getTime() )/1000
      var t = t0
      while (t<t0+dt) {
        jetzt = new Date()
        t=(jetzt.getTime() )/1000
      }
      alert ("Jetzt sind "+dt+" Sekunden vorbei.")
    }
    //--></script>
    <body onLoad="warten(10)"></body></html>

    1. Hi!

      versuch's doch mal auf die brutale Tour.
      Ich weiß, schön ist anders.

      Das ist glaube ich die erste Möglichkeit wie das funktioniern könnte nur wenn ich das so mache dann fängt die CPU an zu glühen befürchte ich ;-) Ich müßte die CPU zumindest für x Sekunden zu 100% auslasten. Kann man denn mit timeout nicht was ähnliches erreichen? Oder was ist wenn ich die Javascript nicht immer komplett übertrage, sondern eine Funktion verwende und immer die Funktion mit entsprechendem Parameter aufrufe. So könnte ich die Funktion immer Zeitverzögert aufrufen. Wie schon gesagt, der restliche Code läuft ja weiter, also bringt das so noch nicht viel, daher müßte man in der Funktion irgendwas haben, was prüft ob schon mind. 1 Sekunde vergangen ist und erst dann ausgeführt wird. Nur ohne sleep() weiß ich nicht wie man sowas machen soll! In PHP will ich kein Sleep einsetzen denn ich will das PHP-Script nicht künstlich verlangsamen. Oder ich muß den Timeout Parameter Millisekunden erst in Javascript anhand der aktuellen Zeit und dem Zeitpunkt des letzten Ausführens der Funktion ermitteln. Meint Ihr das könnte irgendwie klappen?

      Grüße
      Andreas

      1. Hallo,

        ...nur wenn ich das so mache dann fängt die CPU an zu glühen befürchte ich ;-) Ich müßte die CPU zumindest für x Sekunden zu 100% auslasten.

        Was schadet das? Ich denke, dafür ist sie ausgelegt. Nur das Browserfenster ist mehr oder weniger blockiert, aber genau das willst du ja. Wenn der Browser inzwischen doch etwas anderes machen soll, dann geht das mit setTimeout. Was höhere Priorität hat (z.B. die Maus) funktioniert problemlos weiter, anders darf ein Browser gar nicht konstruiert sein.

        Gruß
        Hans35