在C ++或Java中有没有办法获得CPU使用率?

时间:2012-06-02 23:59:11

标签: java c++ cpu-usage

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

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

7 个答案:

答案 0 :(得分:5)

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());  

答案 1 :(得分:1)

“windows.h”中提供了一些系统调用函数,如GetProcessorInfo(),CallNTPowerInformation(),GetTickCount(),QueryPerformanceFrequency(),QueryPerformanceCounter()等。您可以谷歌他们,或在MSDN中找到它们。我希望这个答案可以帮到你。

答案 2 :(得分:1)

答案将是特定于平台的,并且在Java和C ++案例之间存在差异。在某种程度上,您需要与特定于操作系统的API接口以提取统计信息。有四种可能的方法:

  • 调用适当的外部系统监控命令(系统特定的)和"刮擦"命令的输出。您可以使用Java或C ++执行此操作。

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

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

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

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

答案 3 :(得分:0)

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

此外,“CPU使用率”是一个非常模糊的术语,有多个核心,等等。

答案 4 :(得分:0)

在Java中,您可以使用JavaSysMon

来完成

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

如果您使用的是Linux系统,请考虑使用shell脚本,例如bash。原因是shell脚本对于操作系统调用很有用,比如获取进程ID和用法(pid命令)。与Java或C ++相比,IT技术人员更喜欢使用bash脚本。