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

Вниз

Как узнать частоту работы процессора   Найти похожие ветки 

 
OlegG   (2002-07-26 16:59) [0]

Народ, подскажите, как с помощью WinApi узнать сведения о процессоре и материнской плате?


 
VuDZ   (2002-07-27 02:00) [1]

1. Покапаться в реестре
2. Поискать в инете или в форуме


 
Poirot   (2002-07-28 03:27) [2]

Я уже не помню откуда эта фигня, но вот она есть...

function TpavCPUInfo.MeasureProcessorClock: String;
var
Stamp, Count1, Count2, Freq: Int64;
PriorityClass, Priority : Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
QueryPerformanceFrequency(Freq);
If Freq=0 then begin
MeasureProcessorClock:="0"; //таковое условие невозможно, но-на всякий случай...
EXIT;
end;
Count2:=0;
Try
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
//не знаю, как это пройдёт под NT и потомством. Там это зависит от прав процессов, но, кажется,
//при отсутствии прав на изменение приоритета запрос просто игнорируется, не вызывая ошибки
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
asm
db $0F,$31 /// rdtsc
MOV DWORD PTR Stamp, EAX
MOV DWORD PTR Stamp + 4, EDX
end;
QueryPerformanceCounter(Count1);
Sleep(100);
asm
db $0F,$31 /// rdtsc
SUB EAX, DWORD PTR Stamp
SBB EDX, DWORD PTR Stamp + 4
MOV DWORD PTR Stamp, EAX
MOV DWORD PTR Stamp + 4, EDX
end;
QueryPerformanceCounter(Count2);
Finally
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
End;
If Count2 > 0 //т.е. не было исключений в процессе измерения,
//(например, если процессор не знает команды RDTSC)
then
MeasureProcessorClock:=
FormatFloat("###.###",
Round(Stamp*1.0*Freq/(Count2-Count1))/1000000)
else
MeasureProcessorClock:="0";
end;


 
NailMan   (2002-07-29 06:02) [3]

Если Дельфя не слишком древняя(и проц не старее Пентюха) попробуй так:

Function GetProcessorFrequency:Int64;
Var L,N:Int64;Last:Cardinal;
begin
Last:=GettickCount;
asm
push eax
push edx
xor eax,eax
xor EDX,edx
RDTSC
mov dword ptr L[0],eax
mov dword ptr L[4],edx
pop edx
pop eax
end;
repeat
until (Gettickcount-Last)>=1000;
asm
push eax
push edx
xor eax,eax
xor EDX,edx
RDTSC
mov dword ptr N[0],eax
mov dword ptr N[4],edx
pop edx
pop eax
end;
Result:=N-L;
end;


У меня на K6-2, D6, WinME, WinXP работает точно



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

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

Наверх




Память: 0.45 MB
Время: 0.005 c
3-60956
Kurt
2002-08-27 18:25
2002.09.19
Есть QRDBText! в нем из таблицы вытаскивается числовое значение.


1-61121
LexusU
2002-09-10 12:41
2002.09.19
Как работать с zip файлами (по типу WinAMP)


1-61193
White Tiger
2002-09-08 15:21
2002.09.19
Common Controls на палитре Delpi 6 и 7


14-61263
Nona
2002-08-20 13:58
2002.09.19
Скажите хочу научиться базам данных!


6-61228
La_Liberasion
2002-07-01 05:46
2002.09.19
Контроль соединения с Инетом





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский