get the CPU Speed

Author: Sven Biork 

3 Comments to this tip [Write new comment]

[ Print tip ]    

 

Tip Rating (30):  

Skill:  

Useful:  

Overall:  

 

 

 

function GetCPUSpeed: Double;

const

  DelayTime = 500;

var

  TimerHi, TimerLo: DWORD;

  PriorityClass, Priority: Integer;

begin

  PriorityClass := GetPriorityClass(GetCurrentProcess);

  Priority      := GetThreadPriority(GetCurrentThread);

 

  SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

 

  Sleep(10);

  asm

    dw 310Fh

    mov TimerLo, eax

    mov TimerHi, edx

  end;

  Sleep(DelayTime);

  asm

    dw 310Fh

    sub eax, TimerLo

    sbb edx, TimerHi

    mov TimerLo, eax

    mov TimerHi, edx

  end;

 

  SetThreadPriority(GetCurrentThread, Priority);

  SetPriorityClass(GetCurrentProcess, PriorityClass);

 

  Result := TimerLo / (1000 * DelayTime);

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  ShowMessage(Format('Your CPU speed: %f MHz', [GetCPUSpeed]));

end;

 

 

{Note:

 You should call the GetCPUSpeed function more than

 one time to get a good result. }

 

{Bemerkung:

 Die GetCPUSpeed Funktion sollte mehrere Male

 aufgerufen werden, um einen guten Mittelwert zu erhalten.}