Главная страница
    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.48 MB
Время: 0.046 c
1-1108234685
Flext@r
2005-02-12 21:58
2005.02.27
Архивация данных в Delphi


14-1107986009
Мазут Береговой
2005-02-10 00:53
2005.02.27
Всем читать и смеяться до слёз.. в свободное время..


14-1107504610
Тульский
2005-02-04 11:10
2005.02.27
Хасавьюрт-2


4-1105463184
aglar
2005-01-11 20:06
2005.02.27
Копирование директории


1-1108393628
_Sergey
2005-02-14 18:07
2005.02.27
Чтение файла своей прогой





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