Главная страница
    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.034 c
4-1096311377
tytus
2004-09-27 22:56
2004.10.31
Директория?


14-1097475279
Мазут Береговой
2004-10-11 10:14
2004.10.31
Американцы сняли фильм. Называется "Такси"...


1-1097702237
Кто---то
2004-10-14 01:17
2004.10.31
Как скопировать текст из чужого ЛистБокса ?


14-1097508581
Koala
2004-10-11 19:29
2004.10.31
Может кто подскажет название игры, несколько лет ищу....


3-1096537176
Pilot
2004-09-30 13:39
2004.10.31
Разработка сетевого ПО в Delphi





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