用VC获取Windows系统CPU占有率

Windows/VC下怎样进行软件性能分析(CPU/GPU/Memory) WindowsVC环境下进行软件性能分析,可以通过VisualStudio的内置工具(如性能探查器)、专门的性能分析工具(如IntelVTuneProfiler、NVIDIANsight、WindowsPerformanceAnalyzer)来实现。这些工具提供了从CPU、GPU到内存的详细性能数据,帮助开发者识别和解决性能瓶颈,优化应用程序的性能。 阅读详情

 前段时间,在做一套系统,系统的数据采集部分对系统cpu占有率有要求,在cpu占有率到达100%时,USB传输数据就会出现问题,因此最好能够实时监视CPU的占有率,占有高的时候暂停采集,等到恢复到低占有率时恢复采集,这样系统就比较问题。本来想自己写一个这样的功能,在百度上一搜,结果有前辈分享了(搜索是个好东东啊,提高工作效率哦)。我现在在这里再转载一下(前辈不要见怪,我是换了好多关键字才搜到你的哦),以便有同样需要的朋友,能方便搜到,呵呵。

#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;

typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);
PROCNTQSI NtQuerySystemInformation;

void main()
{   
 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(GetModuleHandle("ntdll"),"NtQuerySystemInformation");   
 if (!NtQuerySystemInformation)      return;   
 // get number of processors in the system   
 status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL);   
 if (status != NO_ERROR)      
  return;   
 int amount=0;
 //printf("/n您的CPU使用率为:    ");   
 while(!_kbhit())   
 {       
  //设置新的系统时间: 
  amount++;
  status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0);       
  if (status!=NO_ERROR)     
   return;       
  status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL);       
  if (status != NO_ERROR)   
   return;
  if (liOldIdleTime.QuadPart != 0)
  {           
   dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
            dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);           
   dbIdleTime = dbIdleTime / dbSystemTime;           
   dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors;  
   int c=(int)dbIdleTime;  
   printf("/b/b/b/b/b/b/b/b/b/b/b/b/b%d---%d%%",amount,c);
  }       
  //改变新的CPU使用率和系统时间       
  liOldIdleTime = SysPerfInfo.liIdleTime;       
  liOldSystemTime = SysTimeInfo.liKeSystemTime;
  Sleep(1000);   
 }
 printf("/n");
}

Windows中7种定时器(VC定时器种类及占用资源对比) VC中提供了很多关于时间操作的函数,利用它们控制程序能够精确地完成定时和计时操作。本文详细介绍了VC中基于Windows的精确定时的七种方式,如下图所示: 图一 图像描述   方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 阅读详情

相关推荐

VC/MFC实现进程CPU使用率监控完整方案

Windows平台的系统级编程中,Visual C++(VC)与Microsoft Foundation Classes(MFC)构成了高效且稳定的开发组合。MFC通过封装复杂的Windows API,以面向对象的方式简化了窗口创建、消息循环和资源管理等核心机制,极大提升了开发效率。其对CWndCDialog等类的抽象,使开发者能够快速构建具有复杂交互逻辑的桌面应用。// 示例:MFC对话框应用程序入口public:该代码段展示了MFC应用类的基本结构,用于初始化主窗口。

weixin_33812391的博客 826

C++获取特定进程CPU使用率的实现代码

写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程,于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教

WindowsVC++获取CPU整体使用率

Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》 http://blog.csdn.net/morewindows/article/details/8678359 配套程序。 讲解了在Windows系统下使用VC++获取系统CPU整体使用率。已经测试,能运行于WinXP和Win7系统

VC中对CPU占用率的控制

1下面代码生成了一条CPU占用率为50%的直 第一种方法for(;;) { for(int i=0;i<6600000;i++)//这个数字根据个PC的主频计算,结合机器周期与时钟周期的知识计算并做适当调节得到 ; Sleep(100);//这里的数值不易过小,若远小于Windows的调度时间片,会造成线程频繁的唤醒和挂起,无形中增加了内核时间 //的不确定性

北方的雪之博客专栏 5023

VC中基于 Windows 的精确定时

导读:  在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位机定时向下位机发送命令和传送数据等。特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要精确定时操作。  众所周知,Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的。这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,

Tisty的兵工厂--新Blog:http://www.UbuntuSky.cn 720

[转]vc下使用windows的性能计数器简介

 /*   vc下使用windows的性能计数器简介    *//*      作者:wlzqin   *//*Microsoft Windwos NT/2000 提供了一个强大的API集来访问系统事件和性能数据的众多计数器。我们既可以实时地得到计数器的值,也可以从一个日志文件中读取计数器数据。功能可为强大,而且使用简单。下面我就简单谈谈在vc中如何使用windows的性能计数器。好,废话少说,我

宋雷的技术博客 1643

VC获取CPU使用率

VC获取CPU使用率,在网上找了很多源代码。

WindowsVC++获取多核CPU各核使用率

Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#》 http://blog.csdn.net/morewindows/article/details/8678382 配套程序,能获取多核CPU各核的使用率,已经测试,能在WinXP及Win7运行。

VC 获取系统信息(CPU,内存,硬盘)

主机配置信息 主机名,IP,DNS,CPU信息,本进程CPU使用率/主机CPU使用率,本进程内存使用量/主机内存使用量/内存总量,各硬盘的使用量/总量 -- 都能获取,貌似server 2008 上获取本进程CPU使用率有问题

VC编写基于Windows的精确定时程序

 用VC编写基于Windows的精确定时程序作者: haixiao ouyang    在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等。特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要精确定时操作。  众所周知,Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消

Jesse's Sky的专栏 1203

VC中基于 Windows 的精确定时[转]

在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等。特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要精确定时操作。 众所周知,Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的。 这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,...

aig8440的博客 123

显示每个进程CPU利用率——WindowsVC(2)

大家好,今天我来说一下显示每个进程CPU利用率的问题,说实话,我的毕业设计作的就是这个,搜遍了网上也没有几个合适的答案,最后功夫不负有心人让我找到了一位高手的程序,原文是这样的,以进程的ID作为参数,进程CPU占用率作为返回值,实时计算特定进程的CPU占用,测试正确。整个程序如下:结构定义:typedef struct _THREAD_INFO{LARGE_INTEGER Create

mones的专栏 4056
上一篇: 位图显示出现颜色失真(VC)
下一篇: 获取CPU占有率的C++类
guosenjuncs
博客等级 码龄21年 2粉丝 29原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值