alexander richter: aufeinanderfolgende setInterval-aufrufe nacheinander abarbeiten

hallo zusammen,

wie kann man bei einem funtionsaufruf, der in etwa so aussieht:

else
{
aktiv=window.setInterval("closeMenu("+istAufalt+")",1);
aktiv=window.setInterval("openMenu("+istAufneuZahl+")",1);
}

erreichen, dass zuerst NUR der erste aufruf abgearbeitet wird und erst DANACH der zweite?

vielen dank im voraus sagt:
alexander

  1. Hi,

    dass zuerst NUR der erste aufruf abgearbeitet wird und erst DANACH der zweite?

    Timeouts (und damit auch Intervalle) sind prinzipiell vollkommen unabhängig von anderen Scriptabarbeitungen. Auf die genaue Reihenfolge hast Du allenfalls durch unterschiedliche Startzeiten Einfluß; durch Ungenauigkeiten (der Prozessor tut auch noch andere Dinge, als nur den nächsten JavaScript-Aufruf zu timen) letztlich nicht mal dies.

    Du kannst aber _ein_ Intervall auch mit _mehreren_ Funktionen aufrufen - der Befehlstrenner ist noch immer das Semikolon.

    Cheatah

    1. Hallo Cheatah,

      dass zuerst NUR der erste aufruf abgearbeitet wird und erst
      DANACH der zweite?
      Timeouts (und damit auch Intervalle) sind prinzipiell vollkommen
      unabhängig von anderen Scriptabarbeitungen.
      Auf die genaue Reihenfolge hast Du allenfalls durch unterschiedliche
      Startzeiten Einfluß; durch Ungenauigkeiten (der Prozessor tut auch
      noch andere Dinge, als nur den nächsten JavaScript-Aufruf zu timen)
      letztlich nicht mal dies.

      Hm. Aber könnte man sich nicht selbst eine Synchronisation bauen?

      Sagen wir mal: eine globale JavaScript-Variable als Flag; die erste
      Funktion setzt dieses Flag, wenn sie fertig ist; die zweite fragt es
      ab (busy wait, ggf. mit sleep() oder etwas Ähnlichem) und fängt erst
      an, wenn sie das gesetzte Flag findet ...

      Viele Grüße
            Michael

      1. Hi Michael!

        Hm. Aber könnte man sich nicht selbst eine Synchronisation bauen?

        Das wird sich nicht umgehen lassen, wenn man konkrete Anforderungen an die Reihenfolge hat.

        Sagen wir mal: eine globale JavaScript-Variable als Flag; die erste
        Funktion setzt dieses Flag, wenn sie fertig ist; die zweite fragt es
        ab (busy wait, ggf. mit sleep() oder etwas Ähnlichem) und fängt erst
        an, wenn sie das gesetzte Flag findet ...

        Ich wuerde einfach eine zentrale Dispatcherfunktion bauen, die einzige, die ueber einen Timer aufgerufen wird. Je nach Programmstatus (zu dem auch gehoert, welche Fkt. wie oft ausgefuehrt wurde) ruft diese dann die eigentlichen Arbeitsroutinen auf. So koennte man z.B. dispatcher() mit einem 10ms-Timer aufrufen lassen, diese gibt dann bei jedem Aufruf an func1() und dann noch bei jedem zweiten Aufruf an func2() weiter. Somit wird func1() mit einer 100Hz-Frequenz aufgerufen, func2() mit 50Hz, und ausserdem func2() immer erst nach func1(). Immer vorausgesetzt natuerlich, dass der ausfuehrende Rechner schnell genug ist, um dies ueberhaupt zu realisieren.

        So long

        1. Hallo Calocybe,

          Ich wuerde einfach eine zentrale Dispatcherfunktion bauen,
          die einzige, die ueber einen Timer aufgerufen wird.

          Au fein - ich wollte schon immer mal ein Betriebssystem
          in JavaScript schreiben ... 8-\

          Viele Grüße
                Michael

  2. hallo zusammen,

    hallo

    wie kann man bei einem funtionsaufruf, der in etwa so aussieht:

    else
    {
    aktiv=window.setInterval("closeMenu("+istAufalt+")",1);
    aktiv=window.setInterval("openMenu("+istAufneuZahl+")",1);
    }

    ich verstehe die logik nicht

    erreichen, dass zuerst NUR der erste aufruf abgearbeitet wird und erst DANACH der zweite?

    ???

    vielen dank im voraus sagt:
    alexander