获得系统中某个进程的cpu使用率
生活随笔
收集整理的這篇文章主要介紹了
获得系统中某个进程的cpu使用率
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
列舉所有進程的CPU占用率) ??
? typedef ? struct ? _THREAD_INFO ??
? { ??
? LARGE_INTEGER ? CreateTime; ??
? DWORD ? dwUnknown1; ??
? DWORD ? dwStartAddress; ??
? DWORD ? StartEIP; ??
? DWORD ? dwOwnerPID; ??
? DWORD ? dwThreadId; ??
? DWORD ? dwCurrentPriority; ??
? DWORD ? dwBasePriority; ??
? DWORD ? dwContextSwitches; ??
? DWORD ? Unknown; ??
? DWORD ? WaitReason; ??
? ??
? }THREADINFO, ? *PTHREADINFO; ??
? ??
? typedef ? struct ? _UNICODE_STRING ??
? { ??
? USHORT ? Length; ??
? USHORT ? MaxLength; ??
? PWSTR ? Buffer; ??
? ??
? } ? UNICODE_STRING; ??
? ??
? typedef ? struct ? _PROCESS_INFO ??
? { ??
? DWORD ? dwOffset; ??
? DWORD ? dwThreadsCount; ??
? DWORD ? dwUnused1[6]; ??
? LARGE_INTEGER ? CreateTime; ??
? LARGE_INTEGER ? UserTime; ??
? LARGE_INTEGER ? KernelTime; ??
? UNICODE_STRING ? ProcessName; ??
? ??
? DWORD ? dwBasePriority; ??
? DWORD ? dwProcessID; ??
? DWORD ? dwParentProcessId; ??
? DWORD ? dwHandleCount; ??
? DWORD ? dwUnused3[2]; ??
? ??
? DWORD ? dwVirtualBytesPeak; ??
? DWORD ? dwVirtualBytes; ??
? ULONG ? dwPageFaults; ??
? DWORD ? dwWorkingSetPeak; ??
? DWORD ? dwWorkingSet; ??
? DWORD ? dwQuotaPeakPagedPoolUsage; ??
? DWORD ? dwQuotaPagedPoolUsage; ??
? DWORD ? dwQuotaPeakNonPagedPoolUsage; ??
? DWORD ? dwQuotaNonPagedPoolUsage; ??
? DWORD ? dwPageFileUsage; ??
? DWORD ? dwPageFileUsagePeak; ??
? ??
? DWORD ? dCommitCharge; ??
? THREADINFO ? ThreadSysInfo[1]; ??
? ??
? } ? PROCESSINFO, ? *PPROCESSINFO; ??
? ??
? ??
? //每秒鐘查詢一次 ??
? void ? __fastcall ? TForm1::Timer1Timer(TObject ? *Sender) ??
? { ??
? Button2Click(NULL); ??
? } ??
? //--------------------------------------------------------------------------- ??
? ??
? void ? __fastcall ? TForm1::Button2Click(TObject ? *Sender) ??
? { ??
? PVOID ? pProcInfo ? = ? NULL; ??
? DWORD ? dwInfoSize ? = ? 0x20000; ??
? PPROCESSINFO ? pProcessInfo; ??
? DWORD ? dwWorkingSet; ??
? long ? ( ? __stdcall ? *NtQuerySystemInformation ? )( ? DWORD, ? PVOID, ? DWORD, ? DWORD ? ); ??
? ??
? ??
? static ? __int64 ? LastTotalProcessCPUUsage ? = ? 0; ??
? static ? __int64 ? LastCurrentProcessCPUUsage ? = ? 0; ??
? ??
? int ? CurrentDelta; ??
? int ? TotalDelta; ??
? ??
? __int64 ? TotalProcessCPUUsage ? = ? 0; ??
? __int64 ? CurrentProcessCPUUsage ? = ? 0; ??
? ??
? / ??
? ??
? pProcInfo ? = ? (PVOID)(new ? byte[dwInfoSize]); ??
? ??
? NtQuerySystemInformation ? = ? (long(__stdcall*)(DWORD,PVOID,DWORD,DWORD)) ??
? GetProcAddress( ? GetModuleHandle( ? "ntdll.dll" ? ),"NtQuerySystemInformation" ? ); ??
? ??
? NtQuerySystemInformation(5,pProcInfo,dwInfoSize,0); ??
? ??
? pProcessInfo ? = ? (PPROCESSINFO)pProcInfo; ??
? ??
? do ??
? { ??
? TotalProcessCPUUsage ? += ? (__int64)pProcessInfo->KernelTime.QuadPart ? + ? (__int64)pProcessInfo->UserTime.QuadPart; ??
? ??
? if(pProcessInfo->dwProcessID ? == ? GetCurrentProcessId()) ??
? { ??
? dwWorkingSet ? = ? pProcessInfo->dwWorkingSet; ? ??
? CurrentProcessCPUUsage ? += ? (__int64)pProcessInfo->KernelTime.QuadPart ? + ? (__int64)pProcessInfo->UserTime.QuadPart; ??
? } ??
? ??
? / ??
? if(pProcessInfo->dwOffset ? == ? 0) ??
? { ??
? break; ??
? } ??
? ??
? pProcessInfo ? = ? (PPROCESSINFO)((byte*)pProcessInfo ? + ? pProcessInfo->dwOffset); ??
? } ??
? while(true); ??
? ??
? TotalDelta ? = ? TotalProcessCPUUsage ? - ? LastTotalProcessCPUUsage; ??
? CurrentDelta ? = ? CurrentProcessCPUUsage ? - ? LastCurrentProcessCPUUsage; ??
? ??
? if(TotalDelta ? != ? 0) ??
? this->Caption ? = ? "CPU ? = ? " ? + ? IntToStr(100 ? * ? CurrentDelta ? / ? TotalDelta) ? + ? ??
? "Memory ? = ? "+ ? IntToStr(dwWorkingSet ? / ? 1024) ? " ? K"; ??
? ??
? LastTotalProcessCPUUsage ? = ? TotalProcessCPUUsage; ??
? LastCurrentProcessCPUUsage ? = ? CurrentProcessCPUUsage; ??
? ??
? delete[] ? pProcInfo; ??
? } ?
? typedef ? struct ? _THREAD_INFO ??
? { ??
? LARGE_INTEGER ? CreateTime; ??
? DWORD ? dwUnknown1; ??
? DWORD ? dwStartAddress; ??
? DWORD ? StartEIP; ??
? DWORD ? dwOwnerPID; ??
? DWORD ? dwThreadId; ??
? DWORD ? dwCurrentPriority; ??
? DWORD ? dwBasePriority; ??
? DWORD ? dwContextSwitches; ??
? DWORD ? Unknown; ??
? DWORD ? WaitReason; ??
? ??
? }THREADINFO, ? *PTHREADINFO; ??
? ??
? typedef ? struct ? _UNICODE_STRING ??
? { ??
? USHORT ? Length; ??
? USHORT ? MaxLength; ??
? PWSTR ? Buffer; ??
? ??
? } ? UNICODE_STRING; ??
? ??
? typedef ? struct ? _PROCESS_INFO ??
? { ??
? DWORD ? dwOffset; ??
? DWORD ? dwThreadsCount; ??
? DWORD ? dwUnused1[6]; ??
? LARGE_INTEGER ? CreateTime; ??
? LARGE_INTEGER ? UserTime; ??
? LARGE_INTEGER ? KernelTime; ??
? UNICODE_STRING ? ProcessName; ??
? ??
? DWORD ? dwBasePriority; ??
? DWORD ? dwProcessID; ??
? DWORD ? dwParentProcessId; ??
? DWORD ? dwHandleCount; ??
? DWORD ? dwUnused3[2]; ??
? ??
? DWORD ? dwVirtualBytesPeak; ??
? DWORD ? dwVirtualBytes; ??
? ULONG ? dwPageFaults; ??
? DWORD ? dwWorkingSetPeak; ??
? DWORD ? dwWorkingSet; ??
? DWORD ? dwQuotaPeakPagedPoolUsage; ??
? DWORD ? dwQuotaPagedPoolUsage; ??
? DWORD ? dwQuotaPeakNonPagedPoolUsage; ??
? DWORD ? dwQuotaNonPagedPoolUsage; ??
? DWORD ? dwPageFileUsage; ??
? DWORD ? dwPageFileUsagePeak; ??
? ??
? DWORD ? dCommitCharge; ??
? THREADINFO ? ThreadSysInfo[1]; ??
? ??
? } ? PROCESSINFO, ? *PPROCESSINFO; ??
? ??
? ??
? //每秒鐘查詢一次 ??
? void ? __fastcall ? TForm1::Timer1Timer(TObject ? *Sender) ??
? { ??
? Button2Click(NULL); ??
? } ??
? //--------------------------------------------------------------------------- ??
? ??
? void ? __fastcall ? TForm1::Button2Click(TObject ? *Sender) ??
? { ??
? PVOID ? pProcInfo ? = ? NULL; ??
? DWORD ? dwInfoSize ? = ? 0x20000; ??
? PPROCESSINFO ? pProcessInfo; ??
? DWORD ? dwWorkingSet; ??
? long ? ( ? __stdcall ? *NtQuerySystemInformation ? )( ? DWORD, ? PVOID, ? DWORD, ? DWORD ? ); ??
? ??
? ??
? static ? __int64 ? LastTotalProcessCPUUsage ? = ? 0; ??
? static ? __int64 ? LastCurrentProcessCPUUsage ? = ? 0; ??
? ??
? int ? CurrentDelta; ??
? int ? TotalDelta; ??
? ??
? __int64 ? TotalProcessCPUUsage ? = ? 0; ??
? __int64 ? CurrentProcessCPUUsage ? = ? 0; ??
? ??
? / ??
? ??
? pProcInfo ? = ? (PVOID)(new ? byte[dwInfoSize]); ??
? ??
? NtQuerySystemInformation ? = ? (long(__stdcall*)(DWORD,PVOID,DWORD,DWORD)) ??
? GetProcAddress( ? GetModuleHandle( ? "ntdll.dll" ? ),"NtQuerySystemInformation" ? ); ??
? ??
? NtQuerySystemInformation(5,pProcInfo,dwInfoSize,0); ??
? ??
? pProcessInfo ? = ? (PPROCESSINFO)pProcInfo; ??
? ??
? do ??
? { ??
? TotalProcessCPUUsage ? += ? (__int64)pProcessInfo->KernelTime.QuadPart ? + ? (__int64)pProcessInfo->UserTime.QuadPart; ??
? ??
? if(pProcessInfo->dwProcessID ? == ? GetCurrentProcessId()) ??
? { ??
? dwWorkingSet ? = ? pProcessInfo->dwWorkingSet; ? ??
? CurrentProcessCPUUsage ? += ? (__int64)pProcessInfo->KernelTime.QuadPart ? + ? (__int64)pProcessInfo->UserTime.QuadPart; ??
? } ??
? ??
? / ??
? if(pProcessInfo->dwOffset ? == ? 0) ??
? { ??
? break; ??
? } ??
? ??
? pProcessInfo ? = ? (PPROCESSINFO)((byte*)pProcessInfo ? + ? pProcessInfo->dwOffset); ??
? } ??
? while(true); ??
? ??
? TotalDelta ? = ? TotalProcessCPUUsage ? - ? LastTotalProcessCPUUsage; ??
? CurrentDelta ? = ? CurrentProcessCPUUsage ? - ? LastCurrentProcessCPUUsage; ??
? ??
? if(TotalDelta ? != ? 0) ??
? this->Caption ? = ? "CPU ? = ? " ? + ? IntToStr(100 ? * ? CurrentDelta ? / ? TotalDelta) ? + ? ??
? "Memory ? = ? "+ ? IntToStr(dwWorkingSet ? / ? 1024) ? " ? K"; ??
? ??
? LastTotalProcessCPUUsage ? = ? TotalProcessCPUUsage; ??
? LastCurrentProcessCPUUsage ? = ? CurrentProcessCPUUsage; ??
? ??
? delete[] ? pProcInfo; ??
? } ?
總結
以上是生活随笔為你收集整理的获得系统中某个进程的cpu使用率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交通银行信用卡循环信用利率是多少
- 下一篇: vxImmrGet