如何取得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;
}
570

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



