Сегодня я расскажу Вам как определить тактовую частоту Вашего процессора. Пример приведён ниже на Delphi. Но думаю, что в C++ его будет несложно переделать (я имею в виду C++ Builder).
Для начала описываем отдельно функцию:
Как Вы видите помимо функций WinAPI мы ещё используем и ассемблеровский код. Затем на необходимо вывести значение функции. Будем выводит, например, в Label:
Вот и всё. Таким образом Вы получите тактовую чистоту Вашего процессора. Можете использовать какую-нибудь функцию для округления значения, поскольку значение выдаётся не в целом виде, а, например, 1717,209404. Ну и подберите единицу измерения (это будет MHz).
Для начала описываем отдельно функцию:
function GetCPUSpeed: Double;
const
DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, 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
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo/(1000.0 * DelayTime);
end;Как Вы видите помимо функций WinAPI мы ещё используем и ассемблеровский код. Затем на необходимо вывести значение функции. Будем выводит, например, в Label:
Label1.Caption:=FloatToStr(GetCPUSpeed);Вот и всё. Таким образом Вы получите тактовую чистоту Вашего процессора. Можете использовать какую-нибудь функцию для округления значения, поскольку значение выдаётся не в целом виде, а, например, 1717,209404. Ну и подберите единицу измерения (это будет MHz).

