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');

1 komentarz

Świetnie działa :)