这里有一段非常简单的代码,取自网络,我稍加修改,贴在这里。用来检查CPU的生产商和品牌,以及当前工作频率,如果是台式机CPU,频率应该恒定,但是移动版本的CPU,频率不停地在变。以下代码用Visual C++编译,因为内嵌一点汇编,造成移植性变差(例如:GCC汇编跟AT&T汇编语法类似,但是MS汇编跟Intel汇编语法类似),以下代码如果希望在MinGW(GCC)下编译,需要修改那点内嵌的汇编。

#include "stdafx.h" #ifndef CPUID_HPP_ #define CPUID_HPP_ #include <string> #include <cstring> #include <iostream> #include <windows.h> typedef unsigned long DWORD; typedef __int64 LONGLONG; class CPUID { public: CPUID() : m_eax(0), m_ebx(0), m_ecx(0), m_edx(0){} std::string vendor(); //哪个厂商出的?Intel, AMD, VIA ? std::string name(); //这是CPU的整体描述 LONGLONG frequency(DWORD stime = 1000);//CPU的当前工作频率 private: void Executecpuid(DWORD veax); LONGLONG cycles() const { DWORD h, l; //不能直接读取,用变量过渡一下 __asm { rdtsc //把当前CPU周期读入寄存器 mov l, eax mov h, edx } LONGLONG high = h, low = l; return high << 32 | low; } DWORD m_eax; DWORD m_ebx; DWORD m_ecx; DWORD m_edx; }; void CPUID::Executecpuid(DWORD veax) { DWORD deax; DWORD debx; DWORD decx; DWORD dedx; __asm { mov eax, veax cpuid mov deax, eax mov debx, ebx mov decx, ecx mov dedx, edx } m_eax = deax; m_ebx = debx; m_ecx = decx; m_edx = dedx; } std::string CPUID::vendor() { const DWORD S = sizeof(DWORD); char cVID[S*3+1]; std::memset(cVID, 0, sizeof(cVID)); Executecpuid(0); std::memcpy(cVID+S*0, &m_ebx, S); std::memcpy(cVID+S*1, &m_edx, S); std::memcpy(cVID+S*2, &m_ecx, S); return std::string(cVID); } std::string CPUID::name() { const DWORD vendorID = 0x80000002; const DWORD S = sizeof(DWORD); char cvendor[S*4*3+1]; std::memset(cvendor, 0, sizeof(cvendor)); for(DWORD i = 0; i < 3; i++) { Executecpuid(vendorID + i); // 每次执行结束后,保存四个寄存器里的ascii码到数组 std::memcpy(cvendor + i*S*4 + S*0, &m_eax, S); std::memcpy(cvendor + i*S*4 + S*1, &m_ebx, S); std::memcpy(cvendor + i*S*4 + S*2, &m_ecx, S); std::memcpy(cvendor + i*S*4 + S*3, &m_edx, S); } return std::string(cvendor); } LONGLONG CPUID::frequency(DWORD stime) { HANDLE hp = GetCurrentProcess(); HANDLE ht = GetCurrentThread(); DWORD pc = GetPriorityClass(hp); DWORD tp = GetThreadPriority(ht); BOOL flag1 = FALSE, flag2 = FALSE; flag1 = SetPriorityClass(hp, REALTIME_PRIORITY_CLASS); //优先级设置最高 flag2 = SetThreadPriority(ht, THREAD_PRIORITY_HIGHEST);//优先级设置最高 //由于CPU本身时间波动较大,因此时间从系统读取,这样比较平均 //周期除以时间就是工作频率,即单位时间内的周期 Sleep(stime); LARGE_INTEGER fq, st, ed; QueryPerformanceFrequency(&fq); QueryPerformanceCounter(&st); LONGLONG start = cycles(); Sleep(stime); QueryPerformanceCounter(&ed); LONGLONG end = cycles(); if(flag1) SetPriorityClass(hp, pc); if(flag2) SetThreadPriority(ht, tp); CloseHandle(hp); CloseHandle(ht); return (end - start) * fq.QuadPart / (ed.QuadPart - st.QuadPart); } #endif #include <cstdio> #include <cstdlib> int main() { CPUID cpu; std::printf("Vendor: %s/n", cpu.vendor().c_str()); std::printf("Full name: %s/n", cpu.name().c_str()); const unsigned TIMES = 3; std::printf("Frequency(testing %d times): ", TIMES); const double UNIT = 1000.0; for(unsigned i = 0; i < TIMES; ++i) { double fre = cpu.frequency() / UNIT; // 假设CPU主频高于1000Hz if(fre > UNIT) fre /= UNIT; std::printf("%f%s ", fre, (fre > 10.0 ? "MHz" : "GHz")); } printf("/n"); std::system("PAUSE"); return 0; }

转载于:https://www.cnblogs.com/iapp/archive/2011/05/18/3631856.html

测试CPU品牌和当前工作频率相关推荐

  1. 20线程测试cpu性能软件,CPU常用跑分软件 你知道那些?

    跑分测试是检测硬件性能的重要手段,但毕竟需要专业测试软件,很多小伙伴对于测试软件一头雾水,不知道有哪些测试软件,本次笔者就给大家科普一下CPU测试中常用的测试软件,帮助大家更好的了解自己电脑的性能. ...

  2. 20线程测试cpu性能软件,评测平台介绍、CPU多线程性能测试

    2.平台介绍及CPU性能测试 AMD AM3+平台 CPUAMD FX-8150(4模块/8核) AMD FX-8350(4模块/8核) 主板华硕 Crosshair V Formula(BIOS版本 ...

  3. linux 测试cpu计算圆周率_Linux下测试CPU性能

    一.安装stress服务 2.解压tar xvf stress_1.0.1.orig.tar.gz 3.进入解压目录执行./configure 4.make 5.make  check 6.make ...

  4. win7系统稳定测试软件,win7系统电脑测试cpu性能的方法(图文)

    一般情况,购买电脑都比较注重cpu性能,cpu是一台计算机的运算核心和控制核心,所以是非常重要的.很多用户遇到win7系统电脑开机CPU就达到80多度,并且会自动关机或重启,非常麻烦,怎么回事呢?这种 ...

  5. “那不勒斯”服务器芯片,那不勒斯定名 AMD发布全新CPU品牌EPYC

    在今天举行的2017年AMD财务分析师日活动上,AMD正式公布了旗下的全新一代服务器处理器品牌:EPYC. EPYC系列产品此前代号为大家熟悉的"那不勒斯(Naples)",最大核 ...

  6. SpecCPU2017 测试cpu性能

    [转载] SpecCPU介绍见: https://blog.csdn.net/qq_36287943/article/details/103601539 官网:https://spec.org/ 1. ...

  7. 20线程测试cpu性能软件,3DMark推出CPU专用测试工具CPU Profile,可对比不同线程下的CPU性能...

    拼 命 加 载 中 ... 其实3DMark的各个测试里面都混有一个物理测试,这个测试其实就是跑CPU的,我们在测试CPU时也经常单独跑这个物理测试,现在3DMark推出了一个专门跑CPU性能的测试- ...

  8. 计算机卡 怎么检测,卡硬工具箱怎么测试CPU 轻松了解自己的处理器性能

    卡硬工具箱是广大电脑爱好者的必备工具箱,软件内置各种使用的电脑性能测试功能,其中就包括常见的CPU性能测试功能选项,如果你还不知道怎么操作,就赶快来看看下方的文章教程吧! 1.测试CPU,也可以在性能 ...

  9. 电脑专业测试cpu的软件,使用什么软件来测试计算机CPU的最佳性能

    wangfei891208 建议购买五种免费的计算机性能测试软件. 2010年5月31日18:22 IT world字体大小: T | T [IT world finish]今天推荐的软件是5个Win ...

最新文章

  1. ATMEGA328实验电路板
  2. GLUT键盘控制(glutKeyboardFunc和glutSpecialFunc)
  3. 爬虫框架webmagic与spring boot的结合使用--转
  4. 全球及中国建筑农业及矿业电动车辆行业营销模式与需求规模预测报告2022版
  5. Mac是大脑,iPad是四肢 如何实现的呢?右键而已
  6. matlab6432有什么区别,在同一台机器上使用Matlab 32和64位,如何在不同的地方存储设置?...
  7. 【ffmpeg for wince】音视频编解码多平台移植(for window/wince)
  8. Replace Delegation with Inheritance(以继承取代委托)
  9. python调用百度地图实现导航pc_利用python和百度地图API实现数据地图标注
  10. 检测c/c++中内存泄露
  11. 国内外知名PT站点最全汇总,含各站内截图及站点链接【转载】
  12. 推荐电影 历年佳片有约电影 1998-2007
  13. 《孽海记·思凡》唱段·风吹荷叶煞
  14. php 英文转中文,php如何将英文引号转换为中文引号
  15. 关于共享单车违规乱停治理方案拟定(畅想共享单车未来五年的战略方向)
  16. CAD批量打图精灵自动识别纸张大小
  17. win11系统下 安装成功ENVI5.6sarscape但不显示插件
  18. 隐马尔可夫模型HMM
  19. 这就是2020:全球云计算十一大年度话题盘点
  20. java中最多小数位_在Java中最多2位小数?

热门文章

  1. div样式调整.txt
  2. [导入]如何禁止掉SharePoint页面个性化?(续)
  3. MacOS中安装python-jekins失败解决方法
  4. java用毫秒数做日期计算的一个踩坑记录
  5. Android序列化的存储和读取
  6. python 正则表达式 匹配指定字符遇到问题记录
  7. Expressions are not allowed at the top level
  8. CMake 与 Finder
  9. uva11990 动态逆序对
  10. 输入一个正整数,求它各位数的数字之和