Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Beitrag 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
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
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: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Beitrag 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.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
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: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Beitrag 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?
Bild
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Beitrag von mk-soft »

Wurde irgendwann auf Performance Timer umgestellt. Die alten liefen noch mit system timer (10..13 ms)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Warum ist 1 Sekunde ungleich 1000 ElapsedMilliseconds?

Beitrag 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
Antworten