Mirror

Determine the processor speed in MHz (Views: 699)


Problem/Question/Abstract:

Determine the processor speed in MHz

Answer:

Here is a handy routine which will return an estimated core processor speed (CPU speed) of your PC. Read the comment to see how to use it.


function GetCpuSpeed: Comp;
{ function to return the CPU clock speed only.                                     }
{ Usage: MessageDlg(Format('%.1f MHz', [GetCpuSpeed]), mtConfirmation, [mbOk], 0); }
var
  t: DWORD;
  mhi, mlo, nhi, nlo: DWORD;
  t0, t1, chi, clo, shr32: Comp;
begin
  shr32 := 65536;
  shr32 := shr32 * 65536;

  t := GetTickCount;
  while t = GetTickCount do
  begin
  end;
  asm
     DB 0FH
     DB 031H
     mov mhi,edx
     mov mlo,eax
  end;

  while GetTickCount < (t + 1000) do
  begin
  end;
  asm
     DB 0FH
     DB 031H
     mov nhi,edx
     mov nlo,eax
  end;

  chi := mhi;
  if mhi < 0 then
    chi := chi + shr32;

  clo := mlo;
  if mlo < 0 then
    clo := clo + shr32;

  t0 := chi * shr32 + clo;

  chi := nhi;
  if nhi < 0 then
    chi := chi + shr32;

  clo := nlo;
  if nlo < 0 then
    clo := clo + shr32;

  t1 := chi * shr32 + clo;

  Result := (t1 - t0) / 1E6;
end;

<< Back to main page