如何取得CPU的主频

如何取得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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值