Code: Alles auswählen
;
; by Danilo
;
; 64bit ElapsedMilliseconds for 32bit systems
;
; http://www.purebasic.fr/english/viewtopic.php?f=5&t=59401
;
; - Must be used with quad variables (.q)
; - Because of signed Quads in PB, this overflows after 106751991167 days (round about 292471208 years)
; - Must be called at least once within 49 days (unsigned Long overflow after 49.7 days)
;
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
Procedure.q ElapsedMilliseconds_64()
Static ElapsedMilliseconds_64_oldValue.q = 0 ; value of last call
Static ElapsedMilliseconds_64_overflow.q = 0 ; how many overflows occured
Protected current_ms.q = ElapsedMilliseconds() & $FFFFFFFF ; get new value as unsigned number
If ElapsedMilliseconds_64_oldValue > current_ms ; If old value is greater than new value
ElapsedMilliseconds_64_overflow + 1 ; increment overflow by 1
EndIf
ElapsedMilliseconds_64_oldValue = current_ms
ProcedureReturn current_ms + ElapsedMilliseconds_64_overflow * $FFFFFFFF ; return current value + overflows
EndProcedure
Macro ElapsedMilliseconds()
ElapsedMilliseconds_64()
EndMacro
CompilerEndIf
For i = 0 To 20
ms.q = ElapsedMilliseconds()
Debug ms
Delay(20)
Next
So sollte es dann 292471208 Jahre laufen. Danach geht es in den negativen Bereich.