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

Вниз

Загруженность CPU   Найти похожие ветки 

 
DelphiLexx ©   (2004-09-27 13:43) [0]

В реестре есть раздел HKEY_DYN_DATA. Основная информация о системе хранится
в ключе PerfStats.
Например для получения информации о загруженности процессора необходимо:
Просто считать значение ключа "PerfStats\StartStat\KERNEL\CPUusage" в секции
HKEY_DYN_DATA. данное действие запускает счётчик. После этого в ключе
"PerfStats\StatData\KERNEL\CPUusage" будет храниться значение в процентах о
загруженности процессора.
Этот способ отлично работает в Win9x, но неработает WinNT\2k\Xp. Как добится
того, чтобы это заработало и WinNT\2k\XP.
Заранее спасибо!


 
Users   (2004-09-27 15:38) [1]

Код модуля :


Type
 // Ñòðóêòóðû äëÿ îïðåäåëåíèÿ çàãðóçêè CPU íà êëîíàõ NT
 NTSTATUS = ULONG;
 PVOID = Pointer;
 _SYSTEM_INFORMATION_CLASS = (
   SystemBasicInformation,
   SystemProcessorInformation,
   SystemPerformanceInformation,
   SystemTimeOfDayInformation,
   SystemNotImplemented1,
   SystemProcessesAndThreadsInformation,
   SystemCallCounts,
   SystemConfigurationInformation,
   SystemProcessorTimes,
   SystemGlobalFlag,
   SystemNotImplemented2,
   SystemModuleInformation,
   SystemLockInformation,
   SystemNotImplemented3,
   SystemNotImplemented4,
   SystemNotImplemented5,
   SystemHandleInformation,
   SystemObjectInformation,
   SystemPagefileInformation,
   SystemInstructionEmulationCounts,
   SystemInvalidInfoClass1,
   SystemCacheInformation,
   SystemPoolTagInformation,
   SystemProcessorStatistics,
   SystemDpcInformation,
   SystemNotImplemented6,
   SystemLoadImage,
   SystemUnloadImage,
   SystemTimeAdjustment,
   SystemNotImplemented7,
   SystemNotImplemented8,
   SystemNotImplemented9,
   SystemCrashDumpInformation,
   SystemExceptionInformation,
   SystemCrashDumpStateInformation,
   SystemKernelDebuggerInformation,
   SystemContextSwitchInformation,
   SystemRegistryQuotaInformation,
   SystemLoadAndCallImage,
   SystemPrioritySeparation,
   SystemNotImplemented10,
   SystemNotImplemented11,
   SystemInvalidInfoClass2,
   SystemInvalidInfoClass3,
   SystemTimeZoneInformation,
   SystemLookasideInformation,
   SystemSetTimeSlipEvent,
   SystemCreateSession,
   SystemDeleteSession,
   SystemInvalidInfoClass4,
   SystemRangeStartInformation,
   SystemVerifierInformation,
   SystemAddVerifier,
   SystemSessionProcessesInformation);
 SYSTEM_INFORMATION_CLASS = _SYSTEM_INFORMATION_CLASS;

 _SYSTEM_PROCESSOR_TIMES = Packed Record
   IdleTime,
     KernelTime,
     UserTime,
     DpcTime,
     InterruptTime: int64;
   InterruptCount: ULONG;
 End;

 SYSTEM_PROCESSOR_TIMES = _SYSTEM_PROCESSOR_TIMES;
 PSYSTEM_PROCESSOR_TIMES = ^_SYSTEM_PROCESSOR_TIMES;

 TNativeQuerySystemInformation = Function(
   SystemInformationClass: SYSTEM_INFORMATION_CLASS;
   SystemInformation: PVOID;
   SystemInformationLength: ULONG;
   ReturnLength: PULONG
   ): NTSTATUS; StdCall;
Var
 // Ïåðåìåííûå äëÿ îïðåäåëåíèÿ çàãðóçêè CPU â Windows NT
 NTDllHandle       : THandle = 0; // Handle íà NTDLL.DLL
 QuerySystemInformation: TNativeQuerySystemInformation = Nil;
 CPUNTUsage        : PSYSTEM_PROCESSOR_TIMES;
 CPUNTUsageSize    : DWORD = 0;
 F_NT_LastValue    : Comp = 0;
 F_NT_Value        : Comp = 0;
 F_NT_LastTicks    : Cardinal = 0;

Implementation

Function GetNTCPUUsage: comp;
Begin
 QuerySystemInformation(SystemProcessorTimes, CPUNTUsage, CPUNTUsageSize, Nil);
 Result := CPUNTUsage^.IdleTime;
End;

// Èíèöèàëèçàöèÿ ñòðóêòóð äëÿ îïðåäåëåíèÿ çàãðóçêè CPU íà Windows NT/2000/XP

Function InitCPUInfo: Boolean;
Const
 STATUS_INFO_LENGTH_MISMATCH = $C0000004;
Var
 R                 : NTSTATUS;
 n                 : Integer;
Begin
 Result := False;
 NTDllHandle := GetModuleHandle("NTDLL.DLL");
 If NTDllHandle <> 0 Then
 Begin
   QuerySystemInformation := TNativeQuerySystemInformation(GetProcAddress(NTDllHandle, "ZwQuerySystemInformation"));
   n := 0;
   GetMem(CPUNTUsage, SizeOf(SYSTEM_PROCESSOR_TIMES));
   R := QuerySystemInformation(SystemProcessorTimes, CPUNTUsage, SizeOf(SYSTEM_PROCESSOR_TIMES), Nil);
   While R = STATUS_INFO_LENGTH_MISMATCH Do
   Begin
     Inc(N);
     ReallocMem(CPUNTUsage, N * SizeOf(CPUNTUsage^));
     R := QuerySystemInformation(SystemProcessorTimes, CPUNTUsage, n * SizeOf(SYSTEM_PROCESSOR_TIMES), Nil);
   End;
   CPUNTUsageSize := N * SizeOf(CPUNTUsage^);
   F_NT_LastTicks := GetTickCount;
   F_NT_LastValue := GetNTCPUUsage;
   Result := True;
 End;
End;

// &#212;&#232;&#237;&#224;&#235;&#232;&#231;&#224;&#246;&#232;&#255; &#241;&#242;&#240;&#243;&#234;&#242;&#243;&#240; &#228;&#235;&#255; &#238;&#239;&#240;&#229;&#228;&#229;&#235;&#229;&#237;&#232;&#255; &#231;&#224;&#227;&#240;&#243;&#231;&#234;&#232; CPU &#237;&#224; Windows NT/2000/XP

Function FinalizeCPUInfo: Boolean;
Begin
 Freemem(CPUNTUsage);
 Result := True;
End;

Function GetCPUUse: Byte;
Const
 Timer100N         = 10000000;
 Timer1S           = 1000;
Var
 Interval          : Cardinal;
 Ticks             : Cardinal;
Begin
 Result := 100;
 Ticks := GetTickCount;
 F_NT_LastValue := F_NT_Value;
 F_NT_Value := GetNTCPUUsage;
 If (Ticks <= F_NT_LastTicks) Then
 Begin
   Result := 0;
 End
 Else
 Begin
   Interval := Ticks - F_NT_LastTicks;
   Result := Round((Timer100n - (F_NT_Value - F_NT_LastValue) / (Interval / Timer1s)) / Timer100n * 100);
 End;
 F_NT_LastTicks := Ticks;
End;


Вызов :

 InitCPUInfo;

 Procent:=GetCPUUse; // 0..100

 FinalizeCPUInfo;


 
grom   (2004-09-27 19:12) [2]

http://micsoft.narod.ru/bonus.html
CPU Usage выводит загрузку процессора в %. (~14KB)



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

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

Наверх




Память: 0.47 MB
Время: 0.05 c
1-1097832637
TeNY
2004-10-15 13:30
2004.10.31
Как определить равенсво двух обьектов тип Tpicture?


10-1048052661
anatol
2003-03-19 08:44
2004.10.31
Виснет сервер приложений


6-1092992182
Den
2004-08-20 12:56
2004.10.31
Вопрос, по закачкам, с помощью делфи


1-1097683247
Mihail
2004-10-13 20:00
2004.10.31
как присоеденить скаченый компонент, поместить его на палитру ?


1-1098176351
starik30
2004-10-19 12:59
2004.10.31
Обмен между потоками





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