温度读取vc++获取cpu温度
2013-06-01 20:44
232 查看
本篇文章个人在北京喝咖啡的时候突然想到的...今天就有想写几篇关于温度读取的文章,所以回家到之后就奋笔疾书的写出来发表了
要获得cpu的温度可以通过汇编指令来读取,这里以intel cpu为例,用rdmsr指令读取 IA32_THERM_STATUS_MSR(0x019C)的值,然后用TjunctionMax 减去这个值就是当前cpu的温度,对于一般的intel cpu 的TjunctionMax值是牢固的,比如我的cpu是Intel Core 2 (45nm),在官网上可以查到其值是100摄氏度,到前面的intel cpu专门有个寄存器IA32_TEMPERATURE_TARGET(0x01A2)保存TjunctionMax的值,可以通过rdmsr指令读取。但是rdmsr指令只能在Ring0层运行,在应用层是执行不了的,必须通过驱动的方式才能执行,在驱动层专门有个函数__readmsr担任读取相似IA32_THERM_STATUS_MSR(0x019C)和
IA32_TEMPERATURE_TARGET特殊寄存器的值,所以只要在驱动层写好调用程序后在下层用DeviceIoControl函数就可读取这些特殊寄存器的值,信号别人已写好了现有的驱动(驱动名 WinRing0.sys),你只要在你的程序里面加载这个驱动然后就可读取这些寄存器的值,获得intel cpu的温度。
其中在下层读取这些寄存器的主要代码如下:
如果是多核cpu可以通过 SetThreadAffinityMask函数切换cpu来获得每个核的温度代码如下:
每日一道理
心是一棵树,爱与希望的根须扎在土里,智慧与情感的枝叶招展在蓝天下。无论是岁月的风雨扑面而来,还是滚滚尘埃遮蔽了翠叶青枝,它总是静默地矗立在那里等待,并接受一切来临,既不倨傲,也不卑微。
心是一棵树,一个个故事被年轮携载;一回回驿动与飞鸟相约;一次次碰撞使它绵密柔韧;一幕幕经历造就了它博广的胸怀。心是一棵树,独木不成林。因此,树与树既独立又相联,心与心既相异又相亲。
上面是读取结果图:
程序的下载地址 http://download.csdn.net/detail/xiaibiancheng/5491513
文章结束给大家分享下程序员的一些笑话语录: 爱情观
爱情就是死循环,一旦执行就陷进去了。
爱上一个人,就是内存泄露--你永远释放不了。
真正爱上一个人的时候,那就是常量限定,永远不会改变。
女朋友就是私有变量,只有我这个类才能调用。
情人就是指针用的时候一定要注意,要不然就带来巨大的灾难。
---------------------------------
原创文章 By
温度和读取
---------------------------------
要获得cpu的温度可以通过汇编指令来读取,这里以intel cpu为例,用rdmsr指令读取 IA32_THERM_STATUS_MSR(0x019C)的值,然后用TjunctionMax 减去这个值就是当前cpu的温度,对于一般的intel cpu 的TjunctionMax值是牢固的,比如我的cpu是Intel Core 2 (45nm),在官网上可以查到其值是100摄氏度,到前面的intel cpu专门有个寄存器IA32_TEMPERATURE_TARGET(0x01A2)保存TjunctionMax的值,可以通过rdmsr指令读取。但是rdmsr指令只能在Ring0层运行,在应用层是执行不了的,必须通过驱动的方式才能执行,在驱动层专门有个函数__readmsr担任读取相似IA32_THERM_STATUS_MSR(0x019C)和
IA32_TEMPERATURE_TARGET特殊寄存器的值,所以只要在驱动层写好调用程序后在下层用DeviceIoControl函数就可读取这些特殊寄存器的值,信号别人已写好了现有的驱动(驱动名 WinRing0.sys),你只要在你的程序里面加载这个驱动然后就可读取这些寄存器的值,获得intel cpu的温度。
其中在下层读取这些寄存器的主要代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | BOOL WINAPI Rdmsr(DWORD index, PDWORD eax, PDWORD edx) { if(gHandle == INVALID_HANDLE_VALUE) { return FALSE; } if(eax == NULL || edx == NULL || gIsMsr == FALSE) { return FALSE; } DWORD returnedLength = 0; BOOL result = FALSE; BYTE outBuf[8] = {0}; result = DeviceIoControl( gHandle, IOCTL_OLS_READ_MSR, &index, sizeof(index), &outBuf, sizeof(outBuf), &returnedLength, NULL ); if(result) { memcpy(eax, outBuf, 4); memcpy(edx, outBuf + 4, 4); } if(result) { return TRUE; } else { return FALSE; } } |
每日一道理
心是一棵树,爱与希望的根须扎在土里,智慧与情感的枝叶招展在蓝天下。无论是岁月的风雨扑面而来,还是滚滚尘埃遮蔽了翠叶青枝,它总是静默地矗立在那里等待,并接受一切来临,既不倨傲,也不卑微。
心是一棵树,一个个故事被年轮携载;一回回驿动与飞鸟相约;一次次碰撞使它绵密柔韧;一幕幕经历造就了它博广的胸怀。心是一棵树,独木不成林。因此,树与树既独立又相联,心与心既相异又相亲。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | void CCPUTemperatureDlg :: OnTimer ( UINT_PTR nIDEvent ) { CEdit * edit =( CEdit *) GetDlgItem ( IDC_EDIT1 ); CEdit * edit1 =( CEdit *) GetDlgItem ( IDC_EDIT2 ); DWORD eax = 0 , edx = 0 ; ULONG result ; char s [ 20 ]; result = SetThreadAffinityMask ( GetCurrentThread (), 1 ); Rdmsr ( 0x19c ,& eax ,& edx ); //read Temperature SetThreadAffinityMask ( GetCurrentThread (), result ); sprintf ( s , "%d" , 100 -(( eax & 0x007f0000 )>> 16 )); edit -> SetWindowText ( s ); result = SetThreadAffinityMask ( GetCurrentThread (), 2 ); Rdmsr ( 0x19c ,& eax ,& edx ); //read Temperature SetThreadAffinityMask ( GetCurrentThread (), result ); sprintf ( s , "%d" , 100 -(( eax & 0x007f0000 )>> 16 )); edit1 -> SetWindowText ( s ); CDialog :: OnTimer ( nIDEvent ); } |
程序的下载地址 http://download.csdn.net/detail/xiaibiancheng/5491513
文章结束给大家分享下程序员的一些笑话语录: 爱情观
爱情就是死循环,一旦执行就陷进去了。
爱上一个人,就是内存泄露--你永远释放不了。
真正爱上一个人的时候,那就是常量限定,永远不会改变。
女朋友就是私有变量,只有我这个类才能调用。
情人就是指针用的时候一定要注意,要不然就带来巨大的灾难。
---------------------------------
原创文章 By
温度和读取
---------------------------------
相关文章推荐
- c# 获取CPU温度(非WMI,直接读取硬件)
- 转载:c# 获取CPU温度(非WMI,直接读取硬件)
- 获取CPU温度(非wmi)
- C#获取CPU温度(OpenHardwareMonitorLib.dll库)
- windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
- 树莓派学习笔记——获取树莓派CPU温度
- imx6 读取CPU温度
- 使用树莓派3获取CPU温度
- 获取cpu温度
- VC++获取计算机Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information)
- 获取树莓派当前状态和数据(温度、CPU、内存、硬盘)
- i.MX6(D-Chip)读取CPU内部温度的方法
- python C语言文件IO读取树莓派CPU、GPU温度
- Python在Linux下获取CPU温度、使用率、内存使用率、硬盘使用率
- 读取CPU核心温度
- Linux 获取CPU温度
- C# 获取CPU温度
- 用VC获取Windows系统CPU占有率
- 树莓派02-获取CPU温度
- 关于获取CPU温度的CSDN帖子