Frage zur genauen Funktionsweise von ElapsedMilliseconds()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds

Beitrag von #NULL »

Nützt aber nichts wenn man Integer Variablen verwendet anstatt Quads, also lieber angewöhnen:

Code: Alles auswählen

time.q = ElapsedMilliseconds()
Wie da gecastet wird wenn man ElapsedMilliseconds() direkt (oder Quad Variablen) in If o.d.g. verwendet will ich jetzt gar nicht wissen. Ist aber für die meisten Programme egal, wenn sie nur zweitweise laufen.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds

Beitrag von NicTheQuick »

Naja, ich vermute die wenigsten da draußen kompilieren noch mit 32-Bit. Bei 64-Bit sind die Integer-Variablen sowieso gleich der Quads.
Aber natürlich hast du trotzdem Recht. Wenn schon, dann sollte man es so machen, dass es definitiv immer funktioniert. :-)
Bild
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds

Beitrag von #NULL »

stimmt auch wieder :)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds

Beitrag von mk-soft »

dige hat geschrieben:Sehe gerade, dass ElapsedMilliseconds() beim ersten Aufruf mit 0 Initialisiert wird und dann kontinuierlich hochzählt.
Bisher hatte man immer die Zeit seit dem Windows Start übermittelt bekommen, als Long, der dann nach 24 Tagen
(> 2147483647 ms) plötzlich ein Vorzeichen bekam :lol: böse Programmierfalle und nun endlich behoben :allright:
Ich verstehe bis heute nicht, das man nicht versteht, das es völlig egal ist das es bei den alten ElapsedMilliseconds (Long)
es zu einen Überlauf in den negativen Wert kommt.

Die Differenz zwischen den sehr grossen positiven Zeitwert zum späteren kleinsten negativen Wert ist IMMER richtig.

Der 32bit Systemtimer hat immer nur Addiert und den Überlauf ignoriert.

Beweis:

Code: Alles auswählen

aktuell.l = $7FFFFFFF - 1000 ; 1000 ms vor den Überlauf

Start.l = aktuell
Debug "Start: " + Start
aktuell + 2000 ; 2000 ms später

Ende.l = aktuell
Debug "Ende: " + Ende

Diff.l = Ende - Start
Debug "Diff: " +Diff
Die Messung der Zeit zwischen zwei abfragen sollte aber nicht länger als 6,7 Jahre dauern.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Vi-P
Beiträge: 30
Registriert: 18.01.2013 18:56

Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds

Beitrag von Vi-P »

Sorry für die Wiederbelebung.
Also es gibt eine neue Version, die ein .q zurückgibt und nach Programmstart bei 0 startet. D.h. selbst wenn der Strom nicht ausfällt und das OS nicht abstürzt ich werde einen Überlauf nicht mehr erleben .. :cry:
Spaß beiseite, die Differenz könnte definitv größer als 24 Tage werden und da will ich sicher sein; testen ist etwas zeitaufwändig. Es wird zwar kein Flugzeug auf dem Rücken fliegen, aber es könnte plötzlich jemand im Dunklen stehen ...

Kann das jemand bestätigen. Die Doku ist hier in diesem Punkt etwas mau.
Antworten