Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2002.09.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
6-61228
La_Liberasion
2002-07-01 05:46
2002.09.19
Контроль соединения с Инетом


3-61024
Bishop
2002-08-30 09:58
2002.09.19
SQL


14-61294
kull
2002-08-23 15:43
2002.09.19
Посоветуйте хороший бесплатный XML редактор...


1-61048
WFox
2002-09-09 10:55
2002.09.19
ComboBox и формат страницы


7-61326
MSknyaz
2002-07-10 17:51
2002.09.19
Как в Проводнике открыть Панель Управления и Принтеры?