Hi all,
This should return the CPU speed (might not work on 486 or lesser CPUs though). It takes 1 second to measure the speed...
Code: Select all
Structure bit64
LowPart.l
HighPart.l
EndStructure
Procedure CPUSpeed ()
DefType.bit64 ulEAX_EDX, ulFreq, ulTicks, ulValue, ulStartCounter, ulResult
QueryPerformanceFrequency_ (ulFreq)
QueryPerformanceCounter_ (ulTicks)
ulValue\LowPart = ulTicks\LowPart + ulFreq\LowPart
! RDTSC
MOV ulEAX_EDX\LowPart, eax
MOV ulEAX_EDX\HighPart, edx
ulStartCounter\LowPart = ulEAX_EDX\LowPart
While (ulTicks\LowPart <= ulValue\LowPart)
QueryPerformanceCounter_ (ulTicks)
Wend
! RDTSC
MOV ulEAX_EDX\LowPart, eax
MOV ulEAX_EDX\HighPart, edx
ulResult\LowPart = ulEAX_EDX\LowPart - ulStartCounter\LowPart
ProcedureReturn ulResult\LowPart / 1000000
EndProcedure
; Takes 1 second to calculate...
mhz = CPUSpeed ()
MessageRequester ("CPU Speed", "CPU speed: " + Str (mhz) + " MHz", #MB_ICONINFORMATION)
See ya,
James L Boyd.
http://www.hi-toro.com/
--