Seite 1 von 1

Timerproblem

Verfasst: 13.05.2007 12:05
von dakotawolf
Hi, bin Javascriptler und tue mich mit den nicht vorhandenen Timern in PB schwer. SetTimer der Api funktioniert nicht, da ich bis jetzt nur eine Demoversion habe.

Möchte eine Zeitanzeige alle Sekunde aktualisieren. Habe mir eine Funktion geschrieben, die das StringGadget aktualisiert.

Wenn ich die Funktion mit delay(1000) benutze steht der Rest und wenn ich Int(elapsedmilliseconds/1000) in eine Variable umlade und dann schaue, ob sie kleiner ist als Int(elapsedmilliseconds/1000) flackert die Anzeige.

Repeat
jetzt.q = Int(ElapsedMilliseconds() / 1000)
If jetzt < Int(ElapsedMilliseconds() / 1000)
zeit()
EndIf

Wie gehts besser? Danke...

Außerdem möchte ich 2 Bilder regelmäßig tauschen, damit ein Blinklichteffekt entsteht - wäre wohl das gleiche Problem...

Verfasst: 13.05.2007 12:16
von DarkDragon
So sollte es funktionieren:

Code: Alles auswählen

; Initialisierung

Repeat ; Deine Hauptschleife halt
  If ElapsedMilliseconds() - alteZeit >= 1000
    ; Aktualisieren der Anzeige
    alteZeit = ElapsedMilliseconds()
  EndIf
  ; ... Sonstiger Kram in deiner Hauptschleife ...
Until k.A.
End

Verfasst: 13.05.2007 12:20
von ts-soft
>> Repeat ; Deine Hauptschleife halt
Die ist doch auch sehr wichtig :wink:

Code: Alles auswählen

Event = WaitWindowEvent(500)
Damit das Eventloop auch regelmässig durchbrochen wird

Verfasst: 13.05.2007 12:43
von dakotawolf
Danke klappt ...

Verfasst: 13.05.2007 13:22
von Kaeru Gaman
noch ein zusaätzlicher hinweis
(dieser fehler wird immer wieder gemacht, obwohl ich mir seit nem jahr den mund fusselig rede)

Didi hat folgenden Code gepostet:

Code: Alles auswählen

  If ElapsedMilliseconds() - alteZeit >= 1000
    ; Aktualisieren der Anzeige
    alteZeit = ElapsedMilliseconds()
  EndIf 
dieser enthält eine wesentliche schwäche:
zeitabweichungen addieren sich auf, weil als neue Zeitbasis die aktuelle zeit genommen wird,
und nicht ein genormter abstand zur alten.

so ist es besser:

Code: Alles auswählen

  If ElapsedMilliseconds() - alteZeit >= 1000
    ; Aktualisieren der Anzeige
    alteZeit + 1000
  EndIf