Gibt es noch eine kleinere Zeit: ElapsedMilliseconds()
Verfasst: 26.06.2014 12:39
Hallo, guten Tag .
Gine es noch eine kleinere Zeiteinheit zum Afragen?
Danke.
Gruss
Gine es noch eine kleinere Zeiteinheit zum Afragen?
Danke.
Gruss
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Code: Alles auswählen
Procedure.q ElapsedCPUCycles()
Protected tc.q
QueryPerformanceCounter_(@tc.q)
ProcedureReturn tc.q
EndProcedure
mytimer.q = ElapsedCPUCycles()
Debug mytimer.q
Code: Alles auswählen
Global QueryPerformanceFrequency.q : QueryPerformanceFrequency_(@QueryPerformanceFrequency)
Procedure.f MeasureTime() ; Gibt die Zeitdifferenz wischen zwei Aufrufen zurück (in Sekunden)
Static OldTime.q
Protected Time.q, Delay.f
QueryPerformanceCounter_(@Time)
Delay = (Time - OldTime)/QueryPerformanceFrequency
OldTime = Time
ProcedureReturn Delay
EndProcedure
MeasureTime()
Delay(0) ; hier irgendwelche Sachen ...
Debug StrF(MeasureTime()*1e6)+" µs"Auch die Funktion selbst ist ein Aufruf.funker hat geschrieben:Wie kann man µs abfrage ohne über eine Procedure machen zwischen 2 Ereignissen.
Weil das aufrufen der Procedure verbraucht auch schon Zeit.
Das geht nicht. Dafür ist die Zeitmessung der CPU nicht geeignet.funker hat geschrieben:Das heißt eine Wavdatei Zeitgenau aus dem Memspeicher auslesen: 1/44000Hz genauigkeit
Code: Alles auswählen
Prototype.i MeasureEvaluationTime_Function()
Procedure.i MeasureEvaluationTime_EmptyFunction()
EndProcedure
Procedure.d MeasureEvaluationTime(Function.MeasureEvaluationTime_Function)
Protected Frequency.q, Time0.q, Time1.q, Time2.q
Protected Loop.i, Loops.i=1
QueryPerformanceFrequency_(@Frequency)
Repeat
Loops * 2
QueryPerformanceCounter_(@Time0)
For Index = 1 To Loops
MeasureEvaluationTime_EmptyFunction()
Next
QueryPerformanceCounter_(@Time1)
For Index = 1 To Loops
Function()
Next
QueryPerformanceCounter_(@Time2)
Until Time2 - Time1 > 1000000
ProcedureReturn ((Time2-Time1)-(Time1-Time0))/Frequency/Loops
EndProcedure
Procedure Function()
Protected a.f = 1.23
Sin(a)
EndProcedure
Define Time.d = MeasureEvaluationTime(@Function())
MessageRequester("EvaluationTime", StrD(Time*1e9,3)+" ns")
Das heißt, die CPU brauch etwa 18 Nanosekunden oder 0,018 µm oder 0,000018 ms---------------------------
EvaluationTime
---------------------------
18.080 ns
---------------------------
OK
---------------------------