0

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

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

4

7 回答 7

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());  
于 2012-06-03T00:18:24.707 回答
1

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

于 2012-06-03T00:12:42.860 回答
1

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

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

  • 在 C++ 中(或在 Java 中使用 JNI / JNA ...

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

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

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

于 2012-06-03T00:16:36.977 回答
0

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

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

于 2012-06-03T00:11:02.153 回答
0

在 Java 中,您可以使用JavaSysMon

于 2012-06-03T00:11:14.373 回答
0

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

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

于 2012-06-03T03:52:46.007 回答
0

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

于 2012-06-03T03:58:42.043 回答