function CPUSpeed:Double;
const
DelayTime=500;
var
TimerHi,TimerLo:Dword;
PriorityCals,Priority:Integer;
begin
PriorityClass :=GetPriorityClass(GetCurrentProcess);
Priority :=GetThreadPririty(GetCurrentThread);
SetPriorityClass(GetCurrentProcess,REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread,THREAD_THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310h
mov TimerLo,eax
mov TimerHi,edx
end;
sleep(DelayTime);
asm
dw 310Fh
sub eax,TimerLo
sub edx,TimerHi
mov TimerLo,eax
mov TimerHi,edx
end;
SetThreadPriority(GetCurrentThread,Priority);
SetPriorityClass(GetCurrentProcess,PriorityClass);
Result :=TimerLo/(1000.0*DealyTime);
end;