CPU - pegando e calculando velocidade do processador

Top  Previous  Next

function GetCPUSpeed: string;

const

  ID_BIT    = $200000// EFLAGS ID bit

  DelayTime = 500;

var

  TimerHi, TimerLo       : DWORD;

  PriorityClass, Priority: Integer;

begin

  Result := '0';

  try

    PriorityClass := GetPriorityClass(GetCurrentProcess);

    Priority      := GetThreadPriority(GetCurrentThread);

    SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

    SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);

 

    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;

 

    SetThreadPriority(GetCurrentThread, Priority);

    SetPriorityClass(GetCurrentProcess, PriorityClass);

    Result := Format('%f MHz', [TimerLo / (1000.0 * DelayTime)]);

  except

  end;

end;