在Windows下取得CPU的时钟速度(PROCESSOR_POWER_INFORMATION)

来源:互联网 发布:电话网络系统 编辑:程序博客网 时间:2024/05/18 18:14

        一直想在Windows下取得CPU的时钟速度,找了好久终于找到了函数CallNtPowerInformation,要想使用它,首先必须包含powrprof.h头文件和链接库powerprof.lib.但是还有几个问题:

        首先powrprof.h和许多其它在Platform SDK中的头文件一样依然没有被C++验证,如果你在C++程序中包含它的时候如果不小心,依然会有链接错误。最好这样包含它:

extern "C" {
#include <powrprof.h>
}
第二个原因是有一个结构不知道什么原因没有包含在powrprof.h中,这个结构是PROCESSOR_POWER_INFORMATION.在Visual C++ 2008 Express Edition中仍然存在这个问题。为了取得正确的处理器速度,我们需要调用CallNtPowerInformation。ProcessorInformation枚举值是第一个参数,PROCESSOR_POWER_INFORMATION 结构的一个数组作为Output缓存(对应于每一个安装在系统中的处理器芯片)。

一种解决的办法是:这个结构因为在MSDN中有定义,所以我们可以在我们自己的文件里定义它:

typedef struct _PROCESSOR_POWER_INFORMATION {  ULONG  Number;  ULONG  MaxMhz;  ULONG  CurrentMhz;  ULONG  MhzLimit;  ULONG  MaxIdleState;  ULONG  CurrentIdleState;} PROCESSOR_POWER_INFORMATION , *PPROCESSOR_POWER_INFORMATION;

 

从PROCESSOR_POWER_INFORMATION这个结构的定义中你可以发现,这个结构提供CPU速度的信息,例如最大速度,当前速度,和空闲状态(尽管我承认我不知道空闲状态位--我会去解决的)有一个相关的API函数GetPwuCapabilities,它也可以取得系统的一些性能。

 

 

 
 
 
原创粉丝点击