问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编程获得CPU的实时使用率和温度

发布网友 发布时间:2022-04-21 00:17

我来回答

3个回答

热心网友 时间:2023-09-25 17:26

#include <windows.h>
#include <conio.h>
#include <stdio.h>

#define SystemBasicInformation 0
#define SystemPerformanceInformation 2
#define SystemTimeInformation 3

#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))

typedef struct
{
DWORD dwUnknown1;
ULONG uKeMaximumIncrement;
ULONG uPageSize;
ULONG uMmNumberOfPhysicalPages;
ULONG uMmLowestPhysicalPage;
ULONG uMmHighestPhysicalPage;
ULONG uAllocationGranularity;
PVOID pLowestUserAddress;
PVOID pMmHighestUserAddress;
ULONG uKeActiveProcessors;
BYTE bKeNumberProcessors;
BYTE bUnknown2;
WORD wUnknown3;
} SYSTEM_BASIC_INFORMATION;

typedef struct
{
LARGE_INTEGER liIdleTime;
DWORD dwSpare[76];
} SYSTEM_PERFORMANCE_INFORMATION;

typedef struct
{
LARGE_INTEGER liKeBootTime;
LARGE_INTEGER liKeSystemTime;
LARGE_INTEGER liExpTimeZoneBias;
ULONG uCurrentTimeZoneId;
DWORD dwReserved;
} SYSTEM_TIME_INFORMATION;

// ntdll!NtQuerySystemInformation (NT specific!)
//
// The function copies the system information of the
// specified type into a buffer
//
// NTSYSAPI
// NTSTATUS
// NTAPI
// NtQuerySystemInformation(
// IN UINT SystemInformationClass, // information type
// OUT PVOID SystemInformation, // pointer to buffer
// IN ULONG SystemInformationLength, // buffer size in bytes
// OUT PULONG ReturnLength OPTIONAL // pointer to a 32-bit
// // variable that receives
// // the number of bytes
// // written to the buffer
// );
typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);

PROCNTQSI NtQuerySystemInformation;

int main(void)
{
SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;
SYSTEM_TIME_INFORMATION SysTimeInfo;
SYSTEM_BASIC_INFORMATION SysBaseInfo;
double dbIdleTime;
double dbSystemTime;
LONG status;
LARGE_INTEGER liOldIdleTime = {0,0};
LARGE_INTEGER liOldSystemTime = {0,0};

NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
GetMoleHandle("ntdll"),
"NtQuerySystemInformation"
);

if (!NtQuerySystemInformation)
return;

// get number of processors in the system
status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL);
if (status != NO_ERROR)
return;

printf("\nCPU Usage (press any key to exit): ");

while(!_kbhit())
{
// get new system time
status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0);
if (status!=NO_ERROR)
return;

// get new CPU's idle time
status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL);
if (status != NO_ERROR)
return;

// if it's a first call - skip it
if (liOldIdleTime.QuadPart != 0)
{
// CurrentValue = NewValue - OldValue
dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);

// CurrentCpuIdle = IdleTime / SystemTime
dbIdleTime = dbIdleTime / dbSystemTime;

// CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.3;

printf("\b\b\b\b%3d%%",(UINT)dbIdleTime);
}

// store new CPU's idle and system time
liOldIdleTime = SysPerfInfo.liIdleTime;
liOldSystemTime = SysTimeInfo.liKeSystemTime;

// wait one second
Sleep(1000);
}
printf("\n");
}

读取温度.好像只能读取主板bios那里的..
不知道这么实现.

热心网友 时间:2023-09-25 17:26

优化大师里不是有个可以时时监控CPU温度的吗?我也不太清楚`

热心网友 时间:2023-09-25 17:27

一楼的好像没明白楼主什么意思, 我这个二楼的虽然也会C++, 但是还没那么高, 搞不了这个问题. 只能祝楼主快点搞定了.

顺便说一下, 你可以看一下 C++ 的 API,可能会有所帮助.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
是选诺顿杀毒软件好还是NOD32好? 诺顿好还是NOD32好???请高手指点 诺顿安全软件和ESET NOD32安全软件相比,谁的防护.杀毒更强,功能更多... 诺顿和NOD32这两个杀毒软件哪个比较好? 什么是土地二次抵押 "口似含莲,乾姜之手"是什么意思? 乾姜的意思是什么 都说Pinnacle Food公司各方面做的好,有对这家了解的吗 空调蒸发箱多久清洗一次 空调蒸发箱需要清洗吗 苹果xr流量设置 如何获取电脑的CPU温度 怎样用代码获得CPU和硬盘的实时温度 VB 怎么获取 CPU温度和硬盘温度 用程序如何获取CPU的温度 cpu温度是如何获取的? C/C++ 如何编程实现读取电脑所有的硬件信息 如何用.NET来获取CPU,显卡和硬盘的温度 c#如何获取硬件的温度 跪求:VB获取CPU温度代码!!! VB 如何得到CPU温度呢? C#如何获取电脑CPU温度,硬盘温度,主板温度,CPU转速 java获取cpu温度,跪求源代码。。。 用python获取电脑cpu温度代码 如何用c# 获取cpu温度! 如何用VB.Net进行CPU温度读取 API里有没有得到cpu温度的函数? superio读取cpu温度的api接口函数 Win10系统下打印机驱动安装不了如何解决 win7搜索到win10共享的打印机,但安装驱动时提示无法安装打印机,如图。求大神赐教 到Win10系统后惠普打印机无法使用怎么办 可以显示CPU温度的软件有哪些? 鲁大师软件如何能知道电脑的cpu温度?谢谢! 如何在文档中插入excel表格 湘源6.0生成的用地平衡表怎么导成excel表格 如何将表格插入excel工作表 现在接码注册微信是什么情况 在PPT中如何插入Excel表格? 如何在CAD中插入EXCEL表格? 如何在EXCEL表其中的一个单元格中插入其他的表格? 我手机号绑的QQ号太多了该怎么办? 手机绑定了10个QQ,没有QQ号如何解绑? 我的手机号绑定的QQ号太多了 怎么才能用手机解绑啊 手机号绑定扣扣太多,如何怎么解绑 404 Not Found 如果一个手机号绑定了五个qq号,那么怎么解绑 以前的手机号绑定了QQ,怎么解除绑定 我的手机号码被人绑定了QQ,怎样才能解除? 手机号绑定qq上限怎么解除 手机号绑定了2个QQ号如何在手机上解绑 怎么解除手机号码与qq绑定了