Hiermit ermittle ich die CPU Geschwindigkeit. Eine nicht ganz unbekannte Assembler Routine in DElphi eingebunden .... ich gebe aber ehrlich zu: Ich verstehe den CODE nich zu 100%!!
Delphi-Quellcode:
function CPU_SPEED_FLOAT: Extended;
const
DelayTime = 500;
// measure time in ms
var
TimerHi, TimerLo: DWord;
PriorityClass, Priority: Integer;
begin
try
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread,
THREAD_PRIORITY_TIME_CRITICAL);
try
Sleep(10);
asm
dw 310Fh
// rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh
// rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
finally
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
end;
Result := TimerLo / (1000.0 * DelayTime);
except
Result := 0;
end;
end;
Warum setze bzw. operiere ich mit "
TimerHi"? ... Kann jemand mir den CODE auskommentieren bzw. erklären, was ich mit den Registern wirklich mache und warum ich
"TimerHi" in der Ausgabe nicht nutze? Wenn die Tutorial und Programmier-Cracks wie Luckie & Co einen Augenblick Zeit haben, würde ich mich freuen ... mag es nicht, Code zu verwenden, den ich nicht zu 100% verstehe.