Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++;或者Java有没有办法获得CPU使用率?_Java_C++_Cpu Usage - Fatal编程技术网

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

在C++;或者Java有没有办法获得CPU使用率?,java,c++,cpu-usage,Java,C++,Cpu Usage,我想写一个小程序,只显示CPU使用率的百分比,就像任务管理器一样。我知道中级C++和java。这两种语言都有办法做到吗?如果是的话,也许举个简单的例子?我看到了一段C++命令,但我不能做它的头或尾。 我在一台计算机上使用Windows7,在另一台计算机上使用XP。至于多核响应,我只想像任务管理器一样显示CPU使用率百分比,即使使用多核处理器也是如此。CPU使用率是操作系统属性,而不是语言属性。检索它的方法将特定于您正在使用的操作系统(您无法识别) 此外,“CPU使用率”是一个非常模糊的术语,有多

我想写一个小程序,只显示CPU使用率的百分比,就像任务管理器一样。我知道中级C++和java。这两种语言都有办法做到吗?如果是的话,也许举个简单的例子?我看到了一段C++命令,但我不能做它的头或尾。
我在一台计算机上使用Windows7,在另一台计算机上使用XP。至于多核响应,我只想像任务管理器一样显示CPU使用率百分比,即使使用多核处理器也是如此。

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


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

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

< P>答案是平台特定的,java和C++案例之间有区别。在某种程度上,您需要与操作系统特定的API接口以提取统计数据。有四种可能的方法:

  • 调用适当的外部系统监控命令(特定于系统)并“刮取”该命令的输出。你可以用java或C++来做这件事。< /p>
  • 在C++中(或在java中使用jni/jNA……如果您真的必须),在OS特定的本地API上调用,提供外部系统监视所使用的信息。< /p>
  • 在Java中,使用一些现有的第三方库来处理特定于系统的JNI/JNA内容。可能的例子包括JavaSysMon和SIGAR。。。虽然我不能提出具体的建议

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

以上所有的问题(可能最后一个除外)都是移植到新平台需要工作

double sysLoad = ManagementFactory.
                         getOperatingSystemMXBean().
                                 getSystemLoadAverage();
  • 不是在每个平台上都能工作
  • 返回过去一分钟的平均负载
编辑: 最近发现了这个

在Java7中,您可以使用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系统,则可以使用Windows Management Instrumentation(WMI)。一旦你让它工作起来,它就是强大的。我从来没有用过Java。当然,使用C#NET更容易。 一个好的链接是


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

< P>如果你使用Linux系统,考虑使用shell脚本,比如BASH。原因是shell脚本对于操作系统调用非常强大,比如获取进程ID和用法(pid命令)。IT技术人员更容易使用BASH脚本而不是java或C++。你应该说哪一个。