我想编写一个小程序,以将 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 ...
在 Java 中,使用一些现有的 3rd-party 库来处理系统特定的 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 命令)。与 Java 或 C++ 相比,IT 技术人员更喜欢使用 bash 脚本。