如何在 C++ 中从 Windows 检索总系统 CPU 使用情况?

How to retrieve total system CPU usage from Windows in C++?

我需要即时检索总 CPU 使用情况,以便反馈系统根据 CPU 是否受到限制来更改行为。为此,我查看了 NtQuerySystemInformation sys 调用,它在任何给定时间提供系统信息,但似乎此功能在最新版本的 Windows 中已被弃用,因为 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

有谁知道此调用支持哪些 OS 版本?赢得 7/8/8.1/10?有没有其他方法可以直接检索总 CPU 使用量?

官方在MSDN上有两个函数。

  1. GetSystemTimes(): 看起来更简单但是很久以前发布了。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms724400(v=vs.85).aspx

  2. 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 " 将显示 OS 的 CPU TIME 和 MEMORY,您可以通过 'system' 调用命令或其他功能。

PS。我仍然认为查看 OS 方面是监控 CPU 使用情况的最佳方式。 (如果我使用这个函数,它也会在里面做同样的事情。)