一直想在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,它也可以取得系统的一些性能。
最新评论