源程序如下:
// Compile: cl /TC
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#define RDST _asm _emit 0x0f _asm _emit 0x31
float GetCpuSpeed()
{
__int64 cStart=0,cEnd=0;
unsigned __int64 nCtr=0,nCtrStop=0,nFrq=0;
QueryPerformanceFrequency((LARGE_INTEGER*)&nFrq);
QueryPerformanceCounter((LARGE_INTEGER*)&nCtrStop);
nCtrStop += nFrq;
_asm
{
RDST
mov DWORD PTR cStart,eax
mov DWORD PTR [cStart+4],edx
}
do
{
QueryPerformanceCounter((LARGE_INTEGER*)&nCtr);
}while(nCtr < nCtrStop);
_asm
{
RDST
mov DWORD PTR cEnd,eax
mov DWORD PTR [cEnd+4],edx
}
return ((float)cEnd-(float)cStart)/1000000;
}
int main()
{
printf("CPU Speed: %5.3f MHz/n",GetCpuSpeed());
return 0;
}

这段代码展示了如何通过编程方式计算CPU的主频。利用Windows API的QueryPerformanceFrequency和QueryPerformanceCounter函数,配合汇编指令RDST获取CPU计数器的值,从而估算CPU速度。最后在main函数中打印出CPU的频率。
3561

被折叠的 条评论
为什么被折叠?



