Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];

Вниз

Нужно програмно определить тактовую частоту процессора   Найти похожие ветки 

 
Abzetdin   (2002-11-29 22:28) [0]

Друзья, пожалуйста подскажите как можно програмно определить тактовую частоту процессора - с помошью как можно короткого кода.

Благодарю


 
Ich Hasse   (2002-11-29 22:32) [1]

Это из реестра...

function GettingCPUClock: string;
var
m_reg: TRegistry;
begin
m_reg:=TRegistry.Create;
m_reg.RootKey:=HKEY_LOCAL_MACHINE;
try
if m_reg.OpenKey("HARDWARE\DESCRIPTION\System\CentralProcessor\0", True) then
begin
try
Result:="CPUClock: "+IntToStr(m_reg.ReadInteger("~MHz"))+" MHz";
except
Result:="Unknown";
end;
m_reg.CloseKey;
end;
finally
m_reg.Free;
end;
end;


 
Abzetdin   (2002-11-29 22:36) [2]

To Ich Hasse
Огромное - благодарю


 
Ich Hasse   (2002-11-29 22:38) [3]

Это, если не через реестр, только соответственно время уйдет 500 мс.

function SpeedCPU: 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);

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 := TimerLo / (1000.0 * DelayTime);
end;


 
Diamond Cat   (2002-11-30 01:39) [4]

2 Ich Hasse если я правильно понял твой код, то он должен показывать сколько операций совершил процессор за заданный промежуток времени, соответственно при не полной загрузке проца, результат будет не верным, надо вставить какой-нибудь цикл, чтоб подгружать проц


 
Ich Hasse   (2002-11-30 20:32) [5]

Именно, и этот код РАБОТАЕТ абсолютно правильно на любых процессорах!!! Я проверял. Частатота с точностью до сотых.
У меня Athlon XP 1500+ программа показала частоту 1333,33 MHz.


 
Ich Hasse   (2002-11-30 20:39) [6]

string:=Format("CPU.Speed: %f MHz", [GetCPUSpeed]);

Вот этой строчкой можно получить из результата функции стринг.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
1-49001
jen_bond
2003-01-04 20:50
2003.01.16
Что лучше сделать с записью параметров в ini


1-49017
Cker
2003-01-07 16:14
2003.01.16
Буфер обмена + Word


1-49079
Праведник
2003-01-04 23:04
2003.01.16
TTimer


6-49186
Troll
2002-11-15 15:53
2003.01.16
Плиzzz. Помогите с WEbApplications!!


4-49377
Александр
2002-11-28 13:32
2003.01.16
использование OCX созданного на основе VCL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский