Zitat von
psd-sign:
Mit anderen Worten, müsste ich das Result so ausgeben??
Result := (TimerLo + TimerHi / (1000.0 * DelayTime);
Nein ... Du müsstest einen ULARGE_INTEGER definieren (einen 64bit Typ) und den HighPart und LowPart entsprechend setzen.
Hier mal eine fehlerbereinigte Version:
Delphi-Quellcode:
function GetProcessorSpeed(TimeToWait : Cardinal) : Cardinal;
var
TickCountFirst, TickCountSecond : Cardinal;
CycleCountFirst, CycleCountSecond : ULARGE_INTEGER;
begin
TickCountFirst := GetTickCount;
// Erster Meßpunkt
asm
dw 310Fh
// rdtsc
mov CycleCountFirst.LowPart, eax
mov CycleCountFirst.HighPart, edx
end;
sleep(TimeToWait);
TickCountSecond := GetTickCount;
// Zweiter Meßpunkt
asm
dw 310Fh
// rdtsc
mov CycleCountSecond.LowPart, eax
mov CycleCountSecond.HighPart, edx
end;
result := (CycleCountSecond.QuadPart - CycleCountFirst.QuadPart)
div ((TickCountSecond - TickCountFirst) * 1000);
end;
Die Funktion empfiehlt sich übrigens nicht zum messen. Stromsparfunktionen etc. verfälschen das Ergebnis. Wenn Du die wirkliche Frequenz haben willst, solltest Du
WMI bemühen
.