Timerproblem

Anfängerfragen zum Programmieren mit PureBasic.
dakotawolf
Beiträge: 7
Registriert: 13.05.2007 11:33
Wohnort: beim größten Kuppeldom in D

Timerproblem

Beitrag 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...
Carpe Diem
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
dakotawolf
Beiträge: 7
Registriert: 13.05.2007 11:33
Wohnort: beim größten Kuppeldom in D

Beitrag von dakotawolf »

Danke klappt ...
Carpe Diem
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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 
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten