Главная страница
    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.032 c
14-1097177871
zokzok
2004-10-07 23:37
2004.10.31
блок питания шумит


1-1097733273
NewDelpher
2004-10-14 09:54
2004.10.31
Диалог выборо папки SHBrowseForFolder


6-1093020458
доброжелатель
2004-08-20 20:47
2004.10.31
OnRecv и прочее...


1-1097735375
Руслана
2004-10-14 10:29
2004.10.31
Подскажите в чем ошибка...


1-1097615416
Кто---то
2004-10-13 01:10
2004.10.31
Какой есть ComboBox-образныей компонент для выбора папки ?





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