// // Determinate CPU Freq // // function GetCPUSpeed: Double; const DelayTime = 500;var TimerHi : DWORD;TimerLo : DWORD;PriorityClass : Integer;Priority : Integer;begin PriorityClass := GetPriorityClass(GetCurrentProcess);Priority := GetThreadPriority(GetCurrentThread);SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); Sleep(10); asmDW 310Fh // rdtscMOV TimerLo, EAXMOV TimerHi, EDXend; Sleep(DelayTime); asmDW 310Fh // rdtscSUB EAX, TimerLoSBB EDX, TimerHiMOV TimerLo, EAXMOV TimerHi, EDXend; SetThreadPriority(GetCurrentThread, Priority);SetPriorityClass(GetCurrentProcess, PriorityClass); Result := TimerLo / (1000.0 * DelayTime);end; // Usage ... LabelCPUSpeed.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]); |