Get CPU speed

12. Mai 2007
Jetzt bewerten: (0)
Loading ... Loading ...

I’m not all that good at ASM so what all this does
I can’t explain in much detail.

function TForm1.GetCpuSpeed: Extended;
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;

//and example call
procedure TForm1.Button1Click(Sender: TObject);
begin
 label1.Caption := FloatToStr(GetCpuSpeed) + ‘mhz’;
end;

[tags]Delphi, System[/tags]

Verwandte Artikel

Leave a Reply