`

Visual C++编程实现测试CPU的速度

阅读更多
// 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;
}
};

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCPUSpeedDlg dialog

CCPUSpeedDlg::CCPUSpeedDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCPUSpeedDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCPUSpeedDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCPUSpeedDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCPUSpeedDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCPUSpeedDlg, CDialog)
//{{AFX_MSG_MAP(CCPUSpeedDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCPUSpeedDlg message handlers

BOOL CCPUSpeedDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control
}

void CCPUSpeedDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CCPUSpeedDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CCPUSpeedDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

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);
}

分享到:
评论

相关推荐

    1.CPU信息查询演示(Visual C++编程 源代码)

    1.CPU信息查询演示(Visual C++编程 源代码)1.CPU信息查询演示(Visual C++编程 源代码)1.CPU信息查询演示(Visual C++编程 源代码)1.CPU信息查询演示(Visual C++编程 源代码)1.CPU信息查询演示(Visual C++...

    Visual C++编程技巧280例.rar

    《Visual C++编程技巧280例》是一个针对C++初学者的宝贵资源,它包含了丰富的实例,旨在帮助学习者掌握Visual C++编程的核心技能。C++是一种强大的、通用的编程语言,它融合了面向对象编程、底层系统编程以及泛型...

    Visual C++高级编程

    《Visual C++高级编程》是针对使用Microsoft的Visual C++ 6.0版本进行深入开发的一门技术领域,涵盖了各种高级主题,旨在帮助开发者提升在Windows环境下的编程技能。在这个领域,我们主要会探讨以下几个核心知识点:...

    visual c++让多核CPU占用率达到100%

    总结起来,Visual C++通过OpenMP提供了一种高效的方法来实现多核CPU的并行计算,从而提高程序的运行速度。通过正确配置项目属性,并在代码中恰当使用`#pragma omp` 指令,你可以充分利用多核处理器的潜力,达到100%...

    Visual C++编程技巧精选500例.pdf

    《Visual C++编程技巧精选500例》pdf Visual C++编程技巧精选500例.pdf 第1章 消息框 001 如何创建消息框? 002 如何设置消息框标题? 003 如何使用资源串创建消息框? 004 如何使用资源串动态显示消息框内容? 005 如何...

    Visual C++图形图像编程技巧.pdf

    不过,根据标题和标签,我们可以推断出这篇文档是关于在Visual C++环境下进行图形图像编程的技巧和方法。因此,接下来的内容将会围绕Visual C++中的图形图像编程技巧展开。 在Visual C++中进行图形图像编程涉及到...

    visual c++网络编程

    《Visual C++网络编程》是关于使用Microsoft的Visual C++编程环境进行网络应用程序开发的主题。在C++编程中,网络编程允许程序通过网络进行通信,实现数据交换和远程服务访问。这一领域涵盖了许多子主题,包括套接字...

    Visual C++精典游戏编程

    本文将主要关注在Visual C++中实现小游戏的编程技巧和知识点。 1. **图形界面与DirectX**:在Visual C++中,游戏通常会利用DirectX框架来处理图形和音频。DirectX是微软为游戏开发者提供的一个API集合,包括Direct...

    Visual C++ 14.0.zip

    Visual C++ 14.0是Microsoft公司开发的一款集成开发环境(IDE),它主要用于编写使用C++编程语言的应用程序。这个版本是在2015年随Visual Studio 2015一起发布的,其核心组件包括编译器、调试器、代码编辑器以及各种...

    Visual C++ 6.0高级编程技术-OpenGL篇 源代码

    在学习这个压缩包中的源代码时,你可以逐步解析每个文件的功能,了解它们如何使用OpenGL API来创建图形,同时结合C++编程知识,理解代码逻辑和结构。这对于提升在Visual C++环境下使用OpenGL的能力非常有帮助。

    Visual C++游戏编程框架/引擎

    在游戏开发领域,Visual C++是一种广泛使用的编程语言,尤其在构建游戏框架和引擎时,它的强大性能和灵活性被开发者所青睐。本文将深入探讨利用Visual C++进行游戏编程框架和引擎的构建,并结合Michael Morrison的...

    Visual_C++权威剖析光盘

    《Visual C++权威剖析》是一本深度探讨Microsoft的C++编程环境——Visual C++的专著。这本书的光盘包含了丰富的学习资源,旨在帮助开发者深入理解Visual C++的各个方面,从而提升其在Windows平台上的软件开发技能。...

    《精通Visual C++ 实效编程280例》光盘源码

    总而言之,《精通Visual C++ 实效编程280例》的光盘源码涵盖了C++编程的多个方面,从基本语法到高级特性,从桌面应用开发到系统级编程,提供了丰富的实例供读者实践和学习。通过这些实例,你不仅可以提升编程技能,...

    用Visual C++实现CPU特权指令操作,VC联系CPU操作好例子.rar

    总之,通过Visual C++实现CPU特权指令操作是一项技术性极强的工作,涉及到对操作系统、硬件和编程语言的深入理解。正确使用这些技术可以极大地提升软件的性能和功能,但同时也需要谨慎对待,因为不恰当的使用可能...

    visual C++ 获取CPU 信息

    在Visual C++中获取CPU的信息是一项常见的系统编程任务,它涉及到操作系统接口的使用以及硬件抽象层的交互。本文将详细讲解如何使用C++,特别是MFC(Microsoft Foundation Classes)库来获取CPU的ID号、制造商信息...

    Visual C++网络通信编程实用案例精选 配套源码

    软件平台:操作系统为Windows 98/Me/NT/2000/XP(推荐使用Windows 2000/XP),调试环境为Visual C++ 6.0及其以上版本(如果不做说明,则默认为Visual C++ 6.0)。 2.光盘的使用方法及注意事项 将本书的源代码拷入...

    精选_毕业设计_基于C++实现的简单CPU模拟器_完整源码

    【标题】"精选_毕业设计_基于C++实现的简单CPU模拟器_完整源码" 涉及到的核心知识点是计算机体系结构、C++编程语言以及软件工程中的毕业设计实践。这个项目旨在通过C++语言来模拟一个简单的CPU,帮助学习者深入理解...

    Visual C++ 2017 X86

    Visual C++ 2017 X86是一款由微软开发的编程环境,专为32位(CPU架构为x86)系统设计,用于支持Python 3.5、3.6及3.7版本的开发和运行。它不仅提供了集成开发环境(IDE),还包含了Microsoft Visual C++运行时库,这是...

    Visual C++多线程编程实例及讲解.

    综上所述,“Visual C++多线程编程实例及讲解”将涵盖多线程创建、同步、通信、线程池以及调试等多个方面,通过实例来指导开发者如何有效地在Visual C++环境中进行并行编程,提高程序的运行效率。无论是初学者还是...

Global site tag (gtag.js) - Google Analytics