程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 編程實現測試CPU的速度

編程實現測試CPU的速度

編輯:vc教程

  CPU的速度隨溫度和電壓的變化而變化,如何隨時查看CPU的速度?下面我們通過編程實現。在這個過程中,要用到匯編語言的知識。

  第一步:生成一個基於對話框的工程CPUSpeed。其他選項我們可以都取其默認值。

  第二步:在對話框上添加一個按鈕,名稱為"測試CPU速度",雙擊此按鈕生成此按鈕的處理函數,OnButton1。

  第三步:在CPUSpeedDlg.cpp文件中定義類Ctime,在OnButton1中添加處理代碼,最後文件CPUSpeedDlg.cpp變成如下:

// CPUSpeedDlg.cpp : implementation file
//
#include "stdafx.h"
#include "CPUSpeed.h"
#include "CPUSpeedDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

///////////////////////////////////////////////
// CAboutDlg dialog used for App About
inline unsigned __int64 theCycleCount(void)
{

 _asm _emit 0x0F
 _asm _emit 0x31

 /// this causes a compiler warning as there is no return statement
 /// however the _emits return a __int64 value
}

class CTimer
{
 unsigned __int64 m_start;

 public:

  unsigned __int64 m_overhead;

 CTimer(void)
 {
  m_overhead = 0;
  Start(); /// we get the start cycle
  m_overhead = Stop();
  // then we get the stop cycle catching the overhead time
 }

 void Start(void)
 {
  m_start = theCycleCount();
 }

 unsigned __int64 Stop(void)
 {
  /// with the stop cycle we remove the overhead's time
  return theCycleCount()-m_start-m_overhead;
 }
};

void CCPUSpeedDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 CString strRawClockFrequency;
 
 CTimer timer;

 long tickslong;
 long tickslongextra;
 timer.Start();
 Sleep(1000);
 unsigned cpuspeed100 = (unsigned)(timer.Stop()/10000);

 tickslong = cpuspeed100/100;
 tickslongextra = cpuspeed100-(tickslong*100);
 strRawClockFrequency.Format("%d.%d MHZ estimate ", tickslong,tickslongextra );
 AfxMessageBox("CPU速度為"+strRawClockFrequency);
 }
 class CAboutDlg : public CDialog
 {
 ……以下為編程環境生成時自動生成的代碼。

  好了,現在點擊按鈕"測試CPU速度"就可以彈出對話框告訴我們CPU的速度了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved