function GetCPUSpeed(): string;
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);
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 := 'Частота: '+FloatToStr(TimerLo / (1000.0 * DelayTime))+' Hz';
end;
Нестабильность значения Hz с вставкой на ассм
codenet.ru
с которого взял пример Кода, получающего Hz процессора
Код:
После использования кода обнаружил, что частота на выходе (каждые 1000 мс записывается в блокнот) Дробная, так еще и разная)
Скорее всего я туплю, просто на ассм я не пишу, и мне непонятно поведение функции.
Вопрос: Откуда нестабильность значения, и откуда дробное значеие.
А разная она потому, что даже с приоритетами REALTIME/CRITICAL не удастся добиться точности реального времени. К слову, используется только TimerLo, но по идее, в TimerHi вряд ли будет отличное от 0 значение (это очень большая тактовая частота должна быть).