Seite 1 von 1

Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Verfasst: 09.01.2023 18:12
von juergenkulow

Code: Alles auswählen

; Gebe die Millisekunden alle zehn Sekunden aus.
d=Date()
For i=0 To 100
  If i%10=0
    Debug ElapsedMilliseconds()
  EndIf 
  While d=Date() : Wend
  d=Date()
Next 
Debug ElapsedMilliseconds()
; 0
; 9003
; 19005
; 29009
; 39011
; 49013
; 59016
; 69018
; 79021
; 89023
; 99026
; 100026

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Verfasst: 09.01.2023 18:25
von NicTheQuick
Ich hab den Code leicht angepasst, weil ich nicht so lange warten wollte und meine CPU nicht auf 100% laufen sollte:

Code: Alles auswählen

d=Date()
For i=0 To 100
  Debug ElapsedMilliseconds()
  While d=Date(): Delay(0) : Wend
  d=Date()
Next 
Debug ElapsedMilliseconds()
Aber das Ergebnis sieht bei mir gut aus:
864
1001
2001
3001
4001
5001
6001
7001
8001
9001
10001
11001
12001
13001
14001
15001
16001
17001
18001
19001
20001
21001
22001
23001
24001
25001
26001
27001
28001
29001
30001
31001
32001
33001
34001
35001
36001
37001
38001
39001
40001
41001
42001
43001
...
Deswegen habe ich keine Ahnung woran es bei dir liegen könnte. Das sieht ja echt aus als würde da etwas gewaltig driften.

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Verfasst: 09.01.2023 20:01
von STARGÅTE
Ich hab's mal mit dem original Code ausgeführt und bekomme auch keine Unregelmäßigkeit.
0
9699
19699
29698
39698
49698
59698
69699
79699
89699
99699
100698

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Verfasst: 09.01.2023 21:59
von NicTheQuick
Gab es nicht bei älteren Windows- oder Purebasic-Versionen noch diese Probleme mit dem ungenauen Millisekunden? Ich erinnere mich an irgendwas, wo ElapsedMilliseconds() nicht auf die Millisekunde genau war. Aber ich bin nicht mehr sicher.

Welche Versionen hast du denn?

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Verfasst: 10.01.2023 00:42
von mk-soft
Wurde irgendwann auf Performance Timer umgestellt. Die alten liefen noch mit system timer (10..13 ms)

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Verfasst: 12.01.2023 19:22
von Mijikai
Code zum Testen:

Code: Alles auswählen

EnableExplicit

Procedure.d TimerResolution()
  Protected.q min,max,cur
  NtQueryTimerResolution_(@max,@min,@cur)
  ProcedureReturn cur / 10000
EndProcedure

Debug "TimerResolution: " + TimerResolution() + " ms"

End