我需要动态检索总CPU使用率,以便反馈系统根据CPU是否受到限制来更改行为。为此,我调查了NtQuerySystemInformation
sys调用,该调用在任何给定时间提供系统信息,但似乎这个函数在最新版本的Windows中已被弃用,因为MSDN页面说明了
[NtQuerySystemInformation将来可能会被更改或不可用 Windows版本。应用程序应使用备用功能 本主题中列出的内容。]
参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724509(v=vs.85).aspx
有谁知道支持此呼叫的操作系统版本?赢7/8 / 8.1 / 10?有没有其他方法可以直接检索总CPU使用率?
答案 0 :(得分:1)
官方说,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 TIME和MEMORY,您可以通过'system'或其他功能调用命令。
PS。我仍然认为查看操作系统端是监控CPU使用率的最佳方法。 (如果我使用该函数,它也将在内部执行相同的操作。)