如何取得CPU的主频
作者:ImMcss 欢迎转载,请以超链接形式保留原文地址。
先看一下什么是主频
主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的工作频率(主频)包括两部分:外频与倍频,两者的乘积就是主频。倍频的全称为倍频系数。CPU的主频与外频之间存在着一个比值关系,这个比值就是倍频系数,简称倍频。倍频可以从1.5一直到23以至更高,以0.5为一个间隔单位。外频与倍频相乘就是主频,所以其中任何一项提高都可以使CPU的主频上升。由于主频并不直接代表运算速度,所以在一定情况下,很可能会出现主频较高的CPU实际运算速度较低的现象。因此主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能 。
取得CPU主频的方法有两种:
一种是从注册表中直接读取主频的信息,另外一只就是自己测CPU的主频了。
废话少说,贴代码了。(以下代码在XP(SP2和Vista上测试通过))
第一种方法,从注册表读取代码
#include "stdafx.h"
#include <windows.h>
#include <iostream>

using namespace std;
DWORD GetCpuClock()

...{
DWORD cpuClock = 0;
HKEY hKey;
LPCTSTR StrKey=(WCHAR *)_T("HARDWARE/DESCRIPTION/System/CentralProcessor/0");
if (ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,StrKey,NULL,KEY_READ,&hKey))

...{
DWORD type = REG_DWORD;
DWORD val;
DWORD count = sizeof(val);

LPCTSTR KeyValue=(WCHAR *)_T("~MHz");
if (ERROR_SUCCESS==RegQueryValueEx(hKey,KeyValue,0, &type, (LPBYTE)&val, &count) )

...{
cpuClock = val;
}
RegCloseKey(hKey);
}

return cpuClock;
}
int _tmain(int argc, _TCHAR* argv[])

...{
DWORD clock = GetCpuClock();
return 0;
}
第二种方法,自己测CPU的主频
#include "stdafx.h"
#include <windows.h>
#include <iostream>

using namespace std;

DWORD GetCpuClock()

...{
LARGE_INTEGER c1;
QueryPerformanceCounter( &c1 );

LARGE_INTEGER c2;
QueryPerformanceCounter( &c2 );
unsigned __int64 start = __rdtsc();

DWORD startTickCount = GetTickCount();

while( GetTickCount() - startTickCount < static_cast<DWORD>( 100 ) ) ...{}

LARGE_INTEGER c3;
QueryPerformanceCounter( &c3 );
unsigned __int64 end = __rdtsc();

LARGE_INTEGER freq;
QueryPerformanceFrequency( &freq );

unsigned __int64 e = ( c3.QuadPart - c2.QuadPart ) - ( c2.QuadPart - c1.QuadPart );
double elapsed = static_cast<double>( e ) / static_cast<double>( freq.QuadPart );

return (static_cast<double>( ( end - start ) / elapsed ) )/1000000;
}

int _tmain(int argc, _TCHAR* argv[])

...{
DWORD clock = GetCpuClock();
return 0;
}