vs2013 获取cpu温度
环境: window7 64位 cpu Intel i3-4170
一、程序运行如下:
i3-4170是双核四线程。我暂时没有找出区分线程数跟核心数的区别。这个问题以后再去解决吧
二、编程前准备 ( 可以直接跳到三、 处,源码中已经有了)
获得cpu温度的方法是读取cpu寄存器。由于windows的保护机制,无法直接使用汇编程序读取寄存器,因此使用了WinRing0库。
下载链接如下:
http://download.csdn.net/detail/xiufeng_wang/1140396
需要用到的文件如下:
WinRing0.dll
WinRing0.sys
WinRing0x64.dll
WinRing0x64.sys
WinRing0.lib
OlsApi.h
其中WinRing0.lib、OlsApi.h放在编译文件处,其他的需要放在.exe文件夹下。
三、源码如下:
http://download.csdn.net/detail/jiaowosongsong/9496571
四、源码介绍
先来看看主函数部分(readPcInfo.cpp)
好吧主函数基本什么都没有,还是跳过吧。
#include "stdafx.h"
#include "ReadCpuInfo.h"
//#include "OlsApi.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{ReadCpuInfo myCpu; //生成对象//cout << InitializeOls() << endl;;//cout << sysInfo.dwNumberOfProcessors << endl;//cout << sysInfo.dwActiveProcessorMask << endl;while (1){myCpu.ReadCpuTemp(); //调用对象函数,读取cpu温度//cout << myCpu.cpuTemp[0] << endl;myCpu.SysTimeDisplay(); //显示系统时间myCpu.CpuTempDisplay(); //显示cpu温度Sleep(1000);system("cls");}return 0;
}
运用WinRing0获得cpu温度部分:
1.ReadCpuInfo.h
主要就是加载了WinRing0.lib,函数1和函数2 完成了整个流程;
#pragma once
#include<windows.h>
#include "OlsApi.h" //头文件
#pragma comment (lib,"WinRing0.lib") //加载lib
#define CONSOLE_PRINT 1
class ReadCpuInfo
{
private:char fileName[30];
public:int cpuTemp[8];int coreNumber; //获得的线程数int Tjmax;
public:ReadCpuInfo(); virtual ~ReadCpuInfo();
public://void ReadCpuTempInit();void ReadCpuTemp(); //函数2void CpuTempDisplay();void SysTimeDisplay();void clearRecordFile();
private:void ReadCpuInfoInit(); //函数1void ReadCpuInfoExit();void RecordCpuInfo(char *buf);int CheckAndPrint(char message[], BOOL flag);
};
2.ReadCpuInfo.cpp 函数实现
#include "stdafx.h"
#include "ReadCpuInfo.h"
#include <string.h>ReadCpuInfo::ReadCpuInfo()
{ReadCpuInfoInit(); //构造函数初始化dllstrcpy_s(fileName, "CpuInfoRecord.txt");
}ReadCpuInfo::~ReadCpuInfo()
{ReadCpuInfoExit();
}void ReadCpuInfo::ReadCpuTemp() //主要函数
{for (size_t i = 0; i < coreNumber; i++) //遍历CPU{int mask = 0x01 << i; SetProcessAffinityMask(GetCurrentProcess(), mask);//设置当前使用线程(CPU)DWORD eax, ebx, ecx, edx;Rdmsr(0x19c, &eax, &edx); //读取温度寄存器(eax&0x7f0000可以获得温度数据)cpuTemp[i] = Tjmax - ((eax & 0x7f0000) >> 16);//实际温度= Tjmax - 温度数据}}void ReadCpuInfo::ReadCpuInfoInit() //初始化
{if (true == CheckAndPrint("Init DLL function", InitializeOls())) //dll的初始化{if (true == CheckAndPrint("IsCpuid function", IsCpuid())) //判断是否支持Cpuid{if (true == CheckAndPrint("Ismsr function", IsMsr())) //是否支持Rdmsr{DWORD eax, ebx, ecx, edx;Rdmsr(0x1A2, &eax, &edx); //读取寄存器Tjmax = (eax & 0xff0000) >> 16; //获得Tjmax//printf("%d\n", Tjmax); //show max temperatureSYSTEM_INFO sysInfo;GetSystemInfo(&sysInfo);coreNumber = sysInfo.dwNumberOfProcessors; //获得线程数SetProcessAffinityMask(GetCurrentProcess(), 1); //切换到第一个cpu;}}}
}void ReadCpuInfo::ReadCpuInfoExit()
{DeinitializeOls();
}
int ReadCpuInfo::CheckAndPrint(char message[], BOOL flag)
{if (flag){printf("%s is checked Enable!\n", message);return 1;}else{printf("%s is checked unEnabled!\n", message);return 0;}
}void ReadCpuInfo::CpuTempDisplay()
{for (size_t i = 0; i < coreNumber; i++){char buf[1024] = "";
#if (CONSOLE_PRINT)printf("Core #%d: %dC\n", i, cpuTemp[i]);
#else
#endifsprintf_s(buf, "Core #%d: %dC\n", i, cpuTemp[i]);RecordCpuInfo(buf);}
}
void ReadCpuInfo::SysTimeDisplay()
{clearRecordFile();SYSTEMTIME start; //windows.h中 GetLocalTime(&start);//time.h的tm结构体一样的效果 //printf("%d\n", start.wHour);
#if (CONSOLE_PRINT)printf("date: %02d/%02d/%02d\n",start.wYear, start.wMonth, start.wDay);printf("time: %02d:%02d:%02d\n",start.wHour, start.wMinute, start.wSecond);
#else
#endifchar buf[1024] = "";sprintf_s(buf, "date: %02d/%02d/%02d\n", start.wYear, start.wMonth, start.wDay);RecordCpuInfo(buf);memset(buf, 0, sizeof(buf));sprintf_s(buf, "time: %02d:%02d:%02d\n",start.wHour, start.wMinute, start.wSecond);RecordCpuInfo(buf);}void ReadCpuInfo::RecordCpuInfo(char *buf)
{FILE *fp;fopen_s(&fp,fileName, "a+");if (fp == NULL){printf("file open error!\n");return;}else{fwrite(buf, strlen(buf), 1, fp);}fclose(fp);}void ReadCpuInfo:: clearRecordFile()
{FILE *fp;fopen_s(&fp,fileName, "w+");if (fp == NULL){printf("file open error!\n");return ;}fclose(fp);
}
大家看完后估计还是一头雾水,更详细的原理可以看看其他博客:
http://blog.csdn.net/zhangweilst/article/details/43857371
http://www.tuicool.com/articles/EF7rii
vs2013 获取cpu温度相关推荐
- RK3588 实现温控风扇之获取cpu温度(一)
RK3588 实现温控风扇系列文章 第一章: RK3588 实现温控风扇之如何获取cpu温度(一) 第二章: RK3588 实现温控风扇之pwm驱动调试(二) 第三章: RK3588 实现温控风扇之通 ...
- windows用c++获取cpu温度
很抱歉,获取 CPU 温度并不是一件简单的事情,因为 Windows 操作系统本身不提供直接获取 CPU 温度的 API.你可以使用第三方软件来读取 CPU 温度信息,然后通过 Windows API ...
- Linux系统获取CPU温度
Linux系统获取CPU温度 摘自:https://jingyan.baidu.com/article/cbf0e500407d072eab289343.html 各位好,本篇将简单介绍如何在不同系列 ...
- C# 获取CPU 温度 的两种方式
上次接手了一个需要对服务器的检测系统软件,但是在获取CPU温度的时候总是出问题,查找了很多的资料,总结了以下两种方法,是比较常见的 //第一种方法 就是传统的 wimi 方式获取 ,需要引进一个命名空 ...
- 关于获取CPU温度的CSDN帖子
关于获取CPU温度的CSDN帖子 (2008-02-19 13:27:28) 1:各位高手,回句话啊!!cpu的温度放在那里了!!有谁知道!! bios里面那个对么??可以通过读bios来得到cpu的 ...
- 使用python获取cpu温度
import clr import time #获取cpu温度 clr.AddReference(r'D:\temp\OpenHardwareMonitor\OpenHardwareMonitorLi ...
- BMC通过PECI接口获取CPU温度实现方法
本文转载于网络,侵权删. PECI是用于监测CPU及芯片组温度的一线总线(one-wirebus),全称是Platform Environment Control Interface.它最主要的应用是 ...
- python获取cpu温度_如何获得树莓派CPU实时温度值
[前言] 任何的电子设备在工作过程中必定会产生发热的现象,而不控制好设备的温度的话,很有可能会损坏设备,或者照成设备的性能下降,本文将通过学习如何读取树莓派CPU温度值,方便后期对树莓派做一些相应的控 ...
- Python在Linux下获取CPU温度、使用率、内存使用率、硬盘使用率
方法一: psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于 ...
最新文章
- 一文详析微信和淘宝扫码登录背后的实现原理!
- 线性代数可以速成吗_广播/学习吉他速成靠谱吗?真的可以速成吗?
- easyui、表格中添加操作一列,将操作下设置为修改,点击修改弹出该行对象的编号。
- python类实例化_python基础8之类的实例化过程剖析
- (77)译码器与编码器(八三编码器)
- 【机器学习】集成学习(Ensemble Learning)介绍
- Spring Cache使用详解
- Poj(2225),三维BFS
- error C2065: 'assert' : undeclared identifier
- 基于STM32F407_温度传感器DS18B20的TFT显示屏实时显示温度
- 天津滨海农商银行数据脱敏建设实践
- 数据挖掘(数据分析)从业指南
- fastjson 首字母大写问题
- 数据库面试题——索引(一)
- android中的ssl_Android中的SSL固定
- pyqt 服务器mysql_PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改...
- matlab电流可逆斩波电路,电流可逆斩波电路.PPT
- (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
- 企业如何选择合适的SaaS软件?
- elasticsearch查询错误
热门文章
- 行政区划sql数据脚本
- 孔板流量计与均速管流量计的比较
- 地图着色问题javaScript版-- 《算法分析与设计》课程设计题目
- 【多态 多态 多态】
- 让eclipse的主题变成黑色
- GIS篇—搭建本地地图服务器(geoserver )和 leaflet 绘制多边形,点击事件等
- 论文阅读2018-Deep Convolutional Neural Networks for breast cancer screening 重点:利用迁移学习三个网络常规化进行分类
- 【知识兔最牛Excel教程】PPT与Excel中图、表链接起来,自动更新
- 我和 HelloGitHub
- 托管代码C#调用非托管C++ API, 封送嵌套结构体数组