此文档的目的是帮助更多初学《编程之美》的Programmers少走弯路,致力于顺藤摸瓜。笔者也是一名编程初学者。实际编写中时有重新发明轮子的行为,并已患上重度查询文档症。精巧的算法往往伴随生僻的知识点,究其根本,结合编程之美具体实现,在此汇总发布。因水平所限,如有缺漏以及不严谨之处,请各位多多指教。

Point 1:

DWORD busySpan[COUNT];
//DWORD 代表 unsigned long

DWORD代表unsigned long,在WINDEF.H中被定义,定义如下:

typedef unsigned long     DWORD

此处注意:

32位编译器下int为4个字节,unsigned long为4个字节

64位编译器下int为4个字节,unsigned long为8个字节
所以,unsigned long会跟随系统环境变化而变化

Point2:

关于Windows.h头文件内函数的解释:

此处引入 空天遮阳伞 的文章,写的很精辟。

https://blog.csdn.net/zhanshen112/article/details/80379731

在这里我们注意12页的函数:

1.Sleep()

在一段时间内挂起

Sleep()里面的单位,是以毫秒为单位,例如:sleep(1000)意义为使函数挂起1s。

用法:

unsigned sleep(unsigned 毫秒);

2.WaitForSingleObject()

自己停下来,等待某个事件发生。

在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。

典型结构:

DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle;//hHandle could be a series of objects like Event、Job、notifications..etc..
__in DWORD dwMilliseconds;
);

假设我们现在启动计算器程序,然后等待程序结束。可以这样写:

CString strCommand="";
STARTUPINFO sinfo = {sizeof(sinfo)};
PROCESS_INFORMATION pi;
CHAR cWindowsDir[MAX_PATH];
CHAR cCommand[MAX_PATH];
GetWindowsDirectory(cWindowsDir,MAX_PATH); // 获取系统目录
strCommand= (CString)cWindowsDir+"//Calculator.exe";
strcpy(cCommand,strCommand); // 得到计算器的程序路径
BOOL TextUp = CreateProcess(NULL,cCommand,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);if (TextUp)
{if (!WaitForSingleObject(pi.hProcess,INFINITE))// 等待计算器关闭AfxMessageBox(" 计算器已经关闭!");
}

3.GetTickCount()

典型结构:

DWORD GetTickCount(void)

返回从操作系统启动所经过的毫秒数,返回值类型是DWORD。

此函数来自winbase.h. ,定义如下:

WINBASEAPI
DWORD
WINAPI
GetTickCount(VOID);

具体使用不作例举。

4.QueryPerformanceFrequency() 与 QueryPerformanceCounter()

QueryPerformanceFrequency()

检索性能计数器的频率。性能计数器的频率在系统引导时是固定的,并且在所有处理器中都是一致的。因此,只需在应用程序初始化时查询频率,并且可以缓存结果。好处在于,兼容各种不同型号的CPU,且大部分硬件都支持。注意,虽然返回值为BOOL,但在运行XP或更高版本的系统上,该函数将始终成功,因此永远不会返回0。

典型结构:

BOOL WINAPI QueryPerformanceFrequency(_Out_ LARGE_INTEGER *lpFrequency
);

lpFrequency [out]是指向当前性能计数器频率的变量的指针,以 次数/s为单位。

//特别注意此处为 s,而不是ms。

QueryPerformanceCounter()

检索性能计数器的当前值,该值是一个高分辨率(精度<1us)的时间戳,可配合上面的 QueryPerformanceFrequency() 用于时间间隔测量。返回值为BOOL,同 QueryPerformanceFrequency() 函数,该函数在运行XP或更高版本的系统上,始终成功,于是返回的应该始终是非零值。

典型结构:

BOOL WINAPI QueryPerformanceCounter(_Out_ LARGE_INTEGER * lpPerformanceCount //lpPerformanceCount [out]是指向接收当前性能计数器值的变量的指针,以次数为单位。
);

这两个函数都在Winbase.h里,并已被包含于Windows.h .

本文档主要为个人实际操作与理解的基础上编写。

部分资料参考 中国最大同性交友社区-CSDN 前辈网友,在这里表示感谢。

参考文档Microsoft Windows DEV Center 的 文档库。

CPU占用率控制-编程之美初学者参考文档 1.1(上)相关推荐

  1. Linux 下杀毒软件 CPU 占用率为何持续升高?

    作者 | beyondma  责编 | 张文 来源 | CSDN 博客 头图 | CSDN 下载自视觉中国 最近笔者遇到这样一个相对比较疑难的事件,某个在 Linux 下运行的杀毒软件启动后,在某些情 ...

  2. Linux 下杀毒软件 CPU 占用率为何持续升高

    作者 | beyondma  责编 | 张文 来源 | CSDN 博客 头图 | CSDN 下载自视觉中国 最近笔者遇到这样一个相对比较疑难的事件,某个在 Linux 下运行的杀毒软件启动后,在某些情 ...

  3. 疑难杂症:Linux下杀毒软件CPU占用率为何持续升高

    最近笔者遇到这样一个相对比较疑难的事件,某个在Linux下运行的杀毒软件启动后在,某些情况下CPU占用率会持续升高,而且在交易量较高的情况下极易复现.而奇怪的是我们之前已经对于杀毒软件的CPU使用率进 ...

  4. 让多核CPU占用率曲线听你指挥(Windows实现)——《编程之美》1.1学习笔记

    让多核CPU占用率曲线听你指挥--<编程之美>1.1学习笔记 Problem: 写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率.有以下几种情况: ...

  5. 《编程之美》读书笔记23: 1.1 让CPU占用率曲线听你指挥

    题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况:   1.    CPU的占用率固定在50 ...

  6. 编程之美读书笔记_1.1_让CPU占用率曲线听你指挥

    题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况:   1.    CPU的占用率固定在50 ...

  7. linux mysql cpu 查看工具_Shell编程检测监控MySQL的CPU占用率

    shell编程很强大!网站访问量大的时候MySQL的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法就是重启mysql服务.由于这种事具有不可 ...

  8. 编程之美:让CPU占用率曲线听你指挥

    题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: 1.    CPU的占用率固定在50%, ...

  9. (1.5.1.1)编程之美:让CPU占用率曲线听你指挥

    题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: 1.    CPU的占用率固定在50%, ...

最新文章

  1. 06Decorator(装饰)模式
  2. JESD204B与LVDS接口并行 管线式ADC延迟问题分析及解答
  3. 你怎么得到git总是从特定的分支拉?
  4. ASP.net中的validaterequest
  5. 并发数据结构-1.1.2 阻塞技术
  6. POJ - 2002 Squares 数正方形【二分】【哈希表】
  7. 如何分析线程转储– IBM VM
  8. JBPM4.4整合SSH2项目
  9. Bootstrap 字体图标 Bootstrap Glyphicon Components
  10. python 参数_Python命令行参数(七)
  11. Linux nohup命令详解
  12. gt1151触摸驱动调试
  13. php网站登录界面验证码打不开,php网站无法显示验证码
  14. 程序猿来找找自己的目标
  15. allow php templates,PHP 返利网 自动返利支持多个电商网站 源码+程序
  16. 仿支付宝头像外加一个边框的工具类
  17. java版溺尸刷怪塔_minecraft河流群系溺尸刷怪塔存档
  18. 【Servlet】2:认识一下Web服务器——Tomcat
  19. MikTex + VS Code 配置教程
  20. Because an app is obscuring a permission request, Settings can't verify your response

热门文章

  1. 石头剪刀布游戏(Rock-Paper-Scissors)
  2. 四国军棋界面开发(4) 行棋规则和工兵路径
  3. MIPI LCD调试总结
  4. skynet服务的缺陷 lua死循环
  5. 2015春计算机应用技术基础,《计算机应用技术基础》.doc
  6. 浅谈数据治理、数据管理、数据资源与数据资产管理内涵及差异点(建议收藏)...
  7. Unity实现排行榜(PlayerPrefs)
  8. 浅谈codediff_Allione_新浪博客
  9. 苹果序列号/IMEI号查询--Api接口
  10. 无法安装以下功能 .net framework 3.5解决办法