Jak pobrać częstotliwość taktowania procesora
Adam Boduch
Oto procedura:
function CheckCPUSpeed(): integer;
const
DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: integer;
begin
//Ustawienie priorytetu działania
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
//Dokonanie pomiaru
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;
//Przywrócenie priorytetu działania i zwrócenie wyniku
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := integer(Round((TimerLo / (1000.0 * DelayTime))));
end;
Wykorzystanie:
ShowMessage(IntToStr(CheckCPUSpeed) + ' MHz');
Świetnie działa :)