我需要即时检索总 CPU 使用率,以便反馈系统根据 CPU 是否受到限制来更改行为。为此,我查看了 NtQuerySystemInformation
sys 调用,它在任何给定时间提供系统信息,但自从 MSDN 页面说
[NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.]
引用:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724509(v=vs.85).aspx
有谁知道这个调用支持哪些操作系统版本?赢得 7/8/8.1/10?有没有其他方法可以直接检索总 CPU 使用率?
最佳答案
官方在MSDN上有两个函数。
GetSystemTimes():看起来更容易,但很久以前发布了。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms724400(v=vs.85).aspx
GetSystemInfo() :我从 https://code.msdn.microsoft.com/windowsdesktop/Use-PerformanceCounter-to-272d57a1 获得了示例代码
DWORD GetProcessorCount() { SYSTEM_INFO sysinfo; DWORD dwNumberOfProcessors; GetSystemInfo(&sysinfo); dwNumberOfProcessors = sysinfo.dwNumberOfProcessors; return dwNumberOfProcessors; } vector<PCTSTR> GetValidCounterNames() { vector<PCTSTR> validCounterNames; DWORD dwNumberOfProcessors = GetProcessorCount(); DWORD index; vector<PCTSTR> vszProcessNames; TCHAR * szCounterName; validCounterNames.push_back(TEXT("\\Processor(_Total)\\% Processor Time")); validCounterNames.push_back(TEXT("\\Processor(_Total)\\% Idle Time")); // skip some codes return validCounterNames; }
祝你好运!
在我看来,Windows 命令“tasklist/v”将显示操作系统的 CPU 时间和内存,您可以通过“系统”或其他函数调用该命令。
附言。我仍然认为查看操作系统端是监控 CPU 使用率的最佳方式。 (如果我使用该函数,它也会在内部做同样的事情。)
关于c++ - 如何在 C++ 中从 Windows 检索总系统 CPU 使用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357571/