在C++或Java中,有没有办法获取CPU使用率

In C++ or Java is there a way to get the CPU usage?

本文关键字:获取 CPU 使用率 有没有 C++ Java      更新时间:2023-10-16

我想写一个小程序,只是为了将CPU使用率显示为百分比,就像任务管理器一样。我知道中级C++和Java。有没有办法用这两种语言做到这一点?如果是这样,也许是一个简短的例子?我看到了C++命令的某些页面,但我无法分辨它的正面或反面。

我在一台计算机上使用Windows 7,在另一台计算机上使用XP。至于多核响应,我只想像任务管理器一样显示 CPU 使用率百分比,即使使用多核处理器也是如此。

double sysLoad = ManagementFactory.
                         getOperatingSystemMXBean().
                                 getSystemLoadAverage();
  • 并非在每个平台上都有效,
  • 返回过去一分钟的平均负载

编辑:最近发现这个

http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/

在 Java 7 中,您可以使用 com.sun.management 包来获取进程负载或系统负载。

用法:

OperatingSystemMXBean osBean = ManagementFactory
        .getPlatformMXBean(com.sun.management.OperatingSystemMXBean.class);  
// What % CPU load this current JVM is taking, from 0.0-1.0  
System.out.println(osBean.getProcessCpuLoad());  
// What % load the overall system is at, from 0.0-1.0  
System.out.println(osBean.getSystemCpuLoad());  

"windows.h"中提供了一些系统调用函数,例如 GetProcessorInfo()、CallNTPowerInformation()、GetTickCount()、QueryPerformanceFrequency()、QueryPerformanceCounter() 等。你可以用谷歌搜索它们,或者在MSDN中找到它们。希望这个答案能对你有所帮助。

答案将是特定于平台的,并且在 Java 和C++情况下有所不同。 在某种程度上,您需要与特定于操作系统的 API 交互以提取统计信息。 有四种可能的方法:

  • 调用适当的外部系统监视命令(系统特定)并"抓取"命令的输出。 您可以从 Java 或 C++ 执行此操作。

  • 在C++(或在Java中使用JNI/JNA...如果确实有必要),请调用特定于操作系统的本机 API,这些 API 提供外部系统监视使用的信息。

  • 在Java中,使用一些现有的第三方库来处理系统特定的JNI/JNA内容。 可能的例子包括JavaSysMon和SIGAR ...虽然我不能提出具体建议。

  • 您可以使用 Java 监控 API ...但他们没有提供足够的信息。 可以获取有关进程资源使用情况和总体负载平均值的信息,但无法获取有关其他进程的信息。

现在,上述所有问题(可能最后一个除外)是移植到新平台需要工作。

CPU 使用率是操作系统属性,而不是语言属性。 检索它的方式将特定于您正在使用的操作系统(您无法识别)。

此外,"CPU使用率"不再是一个非常模糊的术语,具有多个内核等。

在Java中,你可以使用JavaSysMon来做到这一点

假设您使用的是 Windows 系统,则可以使用 Windows Management Instrumentation (WMI)。一旦你让它工作,它就会很强大。我从来没有用Java做过。当然,使用 C# .NET 更容易。一个好的链接是WMI信息

如果你尝试这个,请告诉我。我可能有兴趣帮助你,因为这也是我的兴趣。

如果你使用的是Linux系统,请考虑使用shell脚本,如bash。原因是 shell 脚本对于操作系统调用非常强大,例如获取进程 ID 和使用情况(pid 命令)。 IT技术人员比Java或C++更熟悉bash脚本。