Home » Tipps & Tricks » System » Hardware » Taktfrequenz der CPU berechnen
Taktfrequenz der CPU berechnen
Diese Routine ‚läuft‘ nur auf der Pentium-Klasse:Die Funktion liest die CPU-Taktfrequenz nicht aus, sondern berechnet sie. Es können deshalb Abweichungen auftreten.
function CalcCPUSpeed: 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;
Grundlagen: Interrupt List Release 52 von Ralf Brown. Die Funktion kann beispielsweise so aufgerufen werden:
procedure TForm1.Button1Click(Sender: TObject); begin Caption := FloatToStr(CalcCPUSpeed); end;
Dabei wird das Ergebnis nicht gerundet ausgegeben. Um einen glatten Wert zu erhalten, kann dieser mittels ‚Round‘ gerundet werden:
procedure TForm1.Button1Click(Sender: TObject); begin Caption := IntToStr(Round(CalcCPUSpeed)); end;