Das hat ja nichts mit der Anzahl der Codezeilen dazwischen zu tun.SilverSurfer hat geschrieben:Und 1 bis zwei Millisekunden in zwei Zeilen Code wäre schon Krass viel, oder nicht?
ElapsedMilliseconds() an sich muss ja "irgendwo" die Zeit messen bzw. auslesen.
Dieses "messen" kann natürlich nicht in jedem einzelnen Takt gemacht werden, sondern nur sporadisch, um nicht den normalen Code zu bremsen.
Somit aktualisiert sich der Wert also irgendwann zwischen zwei Aufrufen und das nicht mal um +1 ms sonden durchaus bis zu mehrere Millisekunden !! wenn andere "wichtigere" Sachen dazwischen kommen.
Hier ein Beispielcode dafür, wo ich direkt hintereinander ElapsedMilliseconds() aufrufe, und nebenbei den Prozessor beschäftige.
Code: Alles auswählen
Procedure Nichts(Void)
Protected I = 0
Repeat
I + 1
ForEver
EndProcedure
Define N
For N = 1 To 4
CreateThread(@Nichts(), 0)
Next
For N = 1 To 100000
Old = ElapsedMilliseconds()
New = ElapsedMilliseconds()
If Old <> New
Debug "+"+Str(New-Old)+"ms"
EndIf
Next
+1ms
+1ms
+1ms
+1ms
+1ms
+6ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+34ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+1ms
+34ms
+1ms
[...]