Michi: Wecker in Javascript

Hallo zusammen

Ausnahmsweise brauche ich mal keinen Tipp, sondern einfach eure Meinung.
Ich habe mit Javascript eine kleine und einfach Weckfunktion programmiert. Die vergleicht jede Sekunde ob die Stunden und Minuten mit der eingegebenen Zeit übereinstimmen. Wenn dem so ist, kommt eine kleine Melodie. Wirklich sehr einfach.
Zuerst wollte ich immer irgendwas rechnen, bis ich auf die Idee mit dem Vergleichen der Zeit kam. Hat das evtl. einen Nachteil?

Der Code sieht in etwas so aus...habe ihn nicht auf diesem PC:

alarm(){
datum = new.Date
stunde = datum.getHours
minute = datum.getMinutes

weckerhrs = "eingegebene Stunden"
weckermin = "eingegebene Minuten"

if (stunde == weckerhrs && minute == weckermin){
     alert("irgendwas")
     clearTimeout
}
else
{
window.setTime(alarm(),1000)
}}

Also mein Code läuft, es geht mir eigentlich nur ums prinzip...ob das so in Ordnung geht.

Dank und Gruss schon mal im voraus
Michi

  1. Sup!

    Eigentlich ist es nicht so gut.
    Du solltest besser die Zahl der Sekunden bis zum Eintreten der Zielzeit ausrechnen und dann *ein* entsprechendes setTimeout machen. Das spart Rechenzeit. Warum jede Sekunde vergleichen, wenn die Funktion (setTimeout) schon an anderer Stelle in schnellerer Form zur Verfuegung steht?

    Gruesse,

    Bio

    --
    Und er laechelt, denn er weiss: Das Boese siegt immer!
    1. Eigentlich ist es nicht so gut.

      Hab mir doch schon gedacht, dass es noch einen Haken hat. :-(

      Du solltest besser die Zahl der Sekunden bis zum Eintreten der Zielzeit ausrechnen und dann *ein* entsprechendes setTimeout machen. Das spart Rechenzeit. Warum jede Sekunde vergleichen, wenn die Funktion (setTimeout) schon an anderer Stelle in schnellerer Form zur Verfuegung steht?

      Werde mal schauen, ob ich das so hingkriege...danke für dein Feedback.

  2. Halihallo Michi

    if (stunde == weckerhrs && minute == weckermin){
    Also mein Code läuft, es geht mir eigentlich nur ums prinzip...ob das so in Ordnung geht.

    Neben dem von Bio gesagten, was natürlich vollkommen richtig ist,
    wollte ich dennoch ein kleines Problem in deinem Code erwähnen:

    Tja, 1000ms warten ist nicht immer 1000ms genau. Sei es, dass der
    Browser-Prozess mal weniger Priorität hat, sei es, dass die
    Festplatte oder andere IO-Operationen gerade ekzessiv benutzt werden,
    sei es, dass der JavaScript-Interpreter auch Zeit braucht die Befehle
    auszuwerten... Lange Rede kurzer Sinn: Bei wiederholten setTimeout()
    Befehlen gibt es "Verschiebungen", welche u.U. dazu führen, dass
    plötzlich eine Sekunde "verloren geht". Falls diese Sekunde genau
    jene ist, wo der Alarm gesetzt wurde, wird der Alarm nie, oder
    mindestens einen Tag später ausgelöst.
    Falls also schon jede Sekunde geprüft wird, muss umbedingt *nicht*
    auf Gleichheit, sondern auf "Grösser als" geschaut werden. Natürlich
    muss der Alarm - wenn er einmal ausgelöst wurde - "deaktiviert"
    werden, sonst kommt er ja jede Sekunde wieder und so möchte man ja
    am Morgen nicht aus dem Bett geholt werden ;)

    Ich würde jedoch stark empfehlen Bio's Vorschlag umzusetzen, dies
    hier war einfach zu deiner Information. Ein setTimeout() mit
    passender Anzahl Sekunden bis zum Alarm, dürfte auf den meisten
    Browsern genauer und vorallem zuverlässiger sein.

    Viele Grüsse

    Philipp

    --
    M$: Patches - don't.
    1. Lange Rede kurzer Sinn: Bei wiederholten setTimeout()

      Befehlen gibt es "Verschiebungen", welche u.U. dazu führen, dass
      plötzlich eine Sekunde "verloren geht". Falls diese Sekunde genau
      jene ist, wo der Alarm gesetzt wurde, wird der Alarm nie, oder
      mindestens einen Tag später ausgelöst.

      Habe mir noch überlegt, die wiederholung nur jede Minute zu machen, dass würde das System ja eigentlich auch weniger belasten...und überhaupt merkte ich, dass man nur auf die Minute genau die Zeit einstellen kann.

      Falls also schon jede Sekunde geprüft wird, muss umbedingt *nicht*
      auf Gleichheit, sondern auf "Grösser als" geschaut werden. Natürlich
      muss der Alarm - wenn er einmal ausgelöst wurde - "deaktiviert"
      werden, sonst kommt er ja jede Sekunde wieder und so möchte man ja
      am Morgen nicht aus dem Bett geholt werden ;)

      Dieses Probelm muss ich noch irgendwie lösen...werde sicher noch drauf kommen...und sonst weiss ich ja, wo mir zuverlässig geholfen wird!! :-)

      Ich würde jedoch stark empfehlen Bio's Vorschlag umzusetzen, dies
      hier war einfach zu deiner Information. Ein setTimeout() mit
      passender Anzahl Sekunden bis zum Alarm, dürfte auf den meisten
      Browsern genauer und vorallem zuverlässiger sein.

      Werde ich wahrscheinlich auch machen (versuchen), mein Problem ist eben, dass ich zum ganzen Programm (Wecker, Stoppuhr, Digitaleuhr...) ein Struktogramm abgeben muss, bis morgen high noon.
      Und das war das letzte Stück, welches mir noch gefehlt hat...so kann ich wenigstens unseren Lehrer glücklich machen.
      Und mich natürlich auch....

      Also cu und recht herzlichen Dank für alles
      Michi

      Viele Grüsse

      Philipp