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

Вниз

Получение названия прцессора и его тактовую частоту   Найти похожие ветки 

 
Mr. Who ©   (2005-01-12 00:56) [0]

Как получить название прцессора и его тактовую частоту


 
Просто Джо ©   (2005-01-12 03:42) [1]

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0


 
kaZaNoVa ©   (2005-01-12 12:52) [2]

program Project1;
{$R *.res}
uses     Windows;
Var s:string;

function GetCPUSpeed: real;

 function IsCPUID_Available: Boolean; assembler; register;
 asm
           PUSHFD                { прямой доступ к флагам невозможен, только через стек }
           POP    EAX            { флаги в EAX }
           MOV    EDX,EAX        { сохраняем текущие флаги }
           XOR    EAX,$200000    { бит ID не нужен }
           PUSH    EAX           { в стек }
           POPFD                { из стека в флаги, без бита ID }
           PUSHFD                { возвращаем в стек }
           POP    EAX            { обратно в EAX }
           XOR    EAX,EDX        { проверяем, появился ли бит ID }
           JZ      @exit         { нет, CPUID не доступен }
           MOV    AL,True        { Result=True }
           @exit:
 end;

 function hasTSC: Boolean;
 var
   Features: Longword;
 begin
   asm
             MOV    Features,0    { Features = 0 }

             PUSH    EBX
             XOR    EAX,EAX
             DW      $A20F
             POP    EBX

             CMP    EAX,$01
             JL      @Fail

             XOR    EAX,EAX
             MOV    EAX,$01
             PUSH    EBX
             DW      $A20F
             MOV    Features,EDX
             POP    EBX
             @Fail:
   end;

   hasTSC := (Features and $10) <> 0;
 end;

const
 DELAY = 500;
var
 TimerHi, TimerLo: Integer;
 PriorityClass, Priority: Integer;
begin
 Result := 0;
 if not (IsCPUID_Available and hasTSC) then Exit;
 PriorityClass := GetPriorityClass(GetCurrentProcess);
 Priority := GetThreadPriority(GetCurrentThread);

 SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
 SetThreadPriority(GetCurrentThread,
   THREAD_PRIORITY_TIME_CRITICAL);

 SleepEx(10, FALSE);

 asm
           DB      $0F           { $0F31 op-code for RDTSC Pentium инструкции }
           DB      $31           { возвращает 64-битное целое (Integer) }
           MOV    TimerLo,EAX
           MOV    TimerHi,EDX
 end;

 SleepEx(DELAY, FALSE);

 asm
           DB      $0F           { $0F31 op-code для RDTSC Pentium инструкции }
           DB      $31           { возвращает 64-битное целое (Integer) }
           SUB    EAX,TimerLo
           SBB    EDX,TimerHi
           MOV    TimerLo,EAX
           MOV    TimerHi,EDX
 end;

 SetThreadPriority(GetCurrentThread, Priority);
 SetPriorityClass(GetCurrentProcess, PriorityClass);
 Result := TimerLo / (1000 * DELAY);
end;

begin
Str(GetCPUSpeed:7:1,s);
MessageBox(0,Pchar(s+"  MZ"),"Частота процессора",0);

end.


 
Kerk ©   (2005-01-12 13:07) [3]

kaZaNoVa ©   (12.01.05 12:52) [2]
опять гланды через задницу


 
kaZaNoVa ©   (2005-01-12 13:29) [4]

Kerk ©   (12.01.05 13:07) [3]
но этот код меня ещё не разу не подводил !!!


 
2Freak   (2005-01-12 13:47) [5]

Простейший способ

function GetCpuMhz: Real;
begin
 with tregistry.Create do
 begin
   rootkey := HKEY_LOCAL_MACHINE;
   openkey("\hardware\description\system\centralprocessor\0\", false);
   result := readinteger("~mhz");
   free;
 end;
end;


 
kaZaNoVa ©   (2005-01-12 13:49) [6]

2Freak   (12.01.05 13:47) [5]
ага, а если под юзером?

> openkey

по дефайлту пытается открыть с правами на запись ..


 
Kerk ©   (2005-01-12 17:10) [7]

kaZaNoVa ©   (12.01.05 13:29) [4]
если работает, не значит прямой.. изменение приоритета текущего потока.. ужас!!!


 
kaZaNoVa ©   (2005-01-12 17:29) [8]

Kerk ©   (12.01.05 17:10) [7]
ага, но работает))))


 
Alex Konshin ©   (2005-01-12 22:12) [9]

Частота проще всего получается по QueryPerformanceFrequency


 
kaZaNoVa ©   (2005-01-13 00:27) [10]

Alex Konshin ©   (12.01.05 22:12) [9]
эта функция какую-то ерунду выдаёт:))0


 
Просто Джо ©   (2005-01-13 01:01) [11]

2 эта функция какую-то ерунду выдаёт:))0

Вопрос на засыпку: А что она, по-вашему, выдавать должна?
(подсказка: телефонный номер Б.Г. ;)


 
pavel_guzhanov   (2005-01-13 08:40) [12]

Поищи на этом форуме топики про WMI. Где-то должна быть ссылка на статью про WMI в Delphi. В ней есть пример работы с WMI, в частности, есть пример получения полной информации о процессоре....



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

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

Наверх




Память: 0.5 MB
Время: 0.064 c
14-1106517183
ArMellon
2005-01-24 00:53
2005.02.27
Кто из вас прошел "Соло на клавиатуре" ?


14-1107701261
DeadMeat
2005-02-06 17:47
2005.02.27
А че это было та?


1-1108488680
han-bratan
2005-02-15 20:31
2005.02.27
RTTI


3-1106813424
ROMshtain
2005-01-27 11:10
2005.02.27
Связь с Oracle


14-1106910087
Aleksandr
2005-01-28 14:01
2005.02.27
Проблема с принтером в сети....