源程序如下:
// 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;
}