首页 > 编程语言 >C++获取CPU信息

C++获取CPU信息

时间:2023-01-10 19:24:22浏览次数:38  
标签:string mov C++ CPU 获取 DWORD CPUType ID memcpy

#include "windows.h" 
#include "iostream"
#include "string"

using namespace std;

//用来存储信息
DWORD deax;
DWORD debx;
DWORD decx;
DWORD dedx;

void ExeCPUID(DWORD veax)//初始化CPU
{
__asm
{
   mov eax,veax
    cpuid
    mov deax,eax
    mov debx,ebx
    mov decx,ecx
    mov dedx,edx
}
}

long GetCPUFreq()//获取CPU频率,单位: MHZ
{
int start1,start2;
_asm rdtsc
   _asm mov start1,eax
   Sleep(50);
_asm rdtsc
   _asm mov start2,eax
   return (start2-start1)/50000;
}

string GetManID()//获取制造商信息
{
char ID[25];//存储制造商信息
memset(ID,0,sizeof(ID));//先清空数组 ID
ExeCPUID(0);//初始化
memcpy(ID+0,&debx,4);//制造商信息前四个字符复制到数组
memcpy(ID+4,&dedx,4);//中间四个
memcpy(ID+8,&decx,4);//最后四个
//如果返回 char * ,会出现乱码;故返回 string 值
return string(ID);
}

string GetCPUType()
{
const DWORD id = 0x80000002; //从0x80000002开始,到0x80000004结束
char CPUType[49];//用来存储CPU型号信息
memset(CPUType,0,sizeof(CPUType));//初始化数组

for(DWORD t = 0 ; t < 3 ; t++ )
{
   ExeCPUID(id+t);
   //每次循环结束,保存信息到数组
   memcpy(CPUType+16*t+ 0,&deax,4);
   memcpy(CPUType+16*t+ 4,&debx,4);
   memcpy(CPUType+16*t+ 8,&decx,4);
   memcpy(CPUType+16*t+12,&dedx,4);
}

return string(CPUType);
}

void main() 

cout<<"本机CPU信息如下:"<<endl;
cout<<"CPU 主 频: "<<GetCPUFreq()<<" MHZ"<<endl;
cout<<"CPU 制造商: "<<GetManID()<<endl;
cout<<"CPU 型 号: "<<GetCPUType()<<endl;
cin.get();

}

 

 

原文地址:http://www.cppblog.com/jerryma/archive/2011/11/30/161215.html

标签:string,mov,C++,CPU,获取,DWORD,CPUType,ID,memcpy
From: https://www.cnblogs.com/tingtaishou/p/17041187.html

相关文章

  • Microsoft 365 开发:如何获取单个用户或者多个用户OneDrive 的存储大小
    Blog链接:https://blog.51cto.com/13969817无论我们做Office365数据备份或者数据迁移,作为ITAdmin我们都需要提前了解Office365每个组件所使用的存储大小,比如我们需要针......
  • 39、商品服务--属性分组---获取分类属性分组
    1、编写controller2、编写实现类......
  • C/C++ 异常处理机制(例:文件拷贝)
    异常是一种程序控制机制,与函数机制互补。函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现“意外”时中断当前函数,并以某种机制......
  • 算法与数据结构高手养成-求职提升特训课(提供C++Java+Python 3大主流语言源码)
    ​​点击下载:算法与数据结构高手养成-求职提升特训课(提供C++Java+Python3大主流语言源码)​​  提取码:br1p《算法与数据结构高手养成-求职提升特训课》,一共17章,课程提供......
  • centos获取系统信息以及系统调优的shell脚本
    #!/bin/bash#2022-08-31#已在在centos7系统下完成测试,获取系统信息和参数调优#Madmaninfo(){echo"+--------------------------------------------------------......
  • 【c&c++】socket编程中的 htons()
      在刚刚接触socket时,遇到了htons()函数,就直接懵逼了,这是什么东西,有什么用?就查了一些资料。  htons()是网络字节序与主机字节序之间转换的函数。用生活中的例子来......
  • C++ 中的 const 限定符
    const需要与“常量”这个说法做一个区分。const就是const,常量是常量,有时候可以通用,但有时候又不能混淆。const限定符const修饰的对象的值不能被改变。可以用来提......
  • 深层级数据的判断和获取
    当后端返给前端的数据层级很深,前端去获取的时候,往往会因为数据缺失而导致页面崩溃。这里我封装了两个函数,一个是判断深层级数据是否存在,另一个是获取深层级的数据。//......
  • C++笔试题汇总二
    C++笔试题一1.以下三条输出语句分别输出什么?[C易]charstr1[]="abc";charstr2[]="abc";constcharstr3[]="abc";constcharstr4[]="abc";constchar*str5......
  • 为什么C++难?
    C++难就难在:在C++中你找不到任何一件简单的事。C++学习经历:1个月:都说C++难,但聪明如我,一个月就读完了C++primer,我看这C++也不过如此.3个月:原来之前一直在用C++语......