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

Вниз

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

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

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

Наверх




Память: 0.48 MB
Время: 0.035 c
4-1105724945
Sicilla
2005-01-14 20:49
2005.02.27
Чтение и запись динамического массива


14-1107509577
syte_ser78
2005-02-04 12:32
2005.02.27
ДСВ


14-1107504575
Sergo
2005-02-04 11:09
2005.02.27
Перфоратор ПЛ 150


6-1103190321
Alexey K
2004-12-16 12:45
2005.02.27
Управление сотовым телефоном


1-1107873039
tolstiak
2005-02-08 17:30
2005.02.27
Функция Pos?





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