昨天在bbs上淘到了这本编程之美。顺手刷了第一章,很有意思。第一章的要求是要控制CPU曲线,绘制出对应的形状。

拿到这个问题,我的第一反应是, 是不是有这么一个API,能在任务管理器上的对应区域直接绘制图形呢? 然后就去查找API, 可惜搜索能力不行,最终还是没有找到。

然后看书上的解释, 太棒了。


解决这道题目的核心是。 CPU占用率的概念,应该是指 CPU忙的时间与总时间的比,他是一个平均值的概念。也就是说。通过控制CPU忙闲时间的比值,我们能够大致控制CPU的占用率。


通过这个思想能够 控制CPU绘制各种我们想要的图形 >_<

方波



sin波



直线

源代码例如以下:

// ==================【控制cpu曲线】=================
// @ author : zhyh2010
// @ date : 20150609
// @ version : 1.0
// @ description : 核心: 在任务管理器的一个刷新周期内
// CPU 忙的时间 和 刷新时间的比率就是 CPU 的占用率
// CPU 显示的实际仅仅是一个平均值
// ================【end of 控制cpu曲线】=============== #include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <math.h> // void busy1()
// {
// for (int i = 0; i != 10; i++)
// {
// system("start calc");
// }
// system("taskkill /f /im calc.exe");
// printf("busy\n");
// } void DrawSin()
{
system("title sin");
const float PI = 3.1415926535;
const int count = 360;
const int GAP = 1;
const DWORD totalTime = 200; float x = 0;
float ratio[count] = { 0 };
for (int i = 0; i != count; i++, x += GAP)
ratio[i] = 0.5 * sin(PI * x / 180.0); for (int i = 0; TRUE; i = (i + 1) % count)
{
DWORD startTime = GetTickCount();
while (GetTickCount() - startTime < (0.5 + ratio[i]) * totalTime);
Sleep((0.5 - ratio[i]) * totalTime);
} } void DrawLinear(float ratio = 0.9)
{
system("title drawline");
const DWORD totalTime = 200;
while (true)
{
DWORD startTime = GetTickCount();
while (GetTickCount() - startTime < ratio * totalTime);
Sleep((1 - ratio) * totalTime);
}
} void DrawSquareWave(float max = 0.9, float min = 0.1)
{
system("title squareWave");
const DWORD totalTime = 200;
const int count = 300; for (int i = 0; TRUE; i = (i + 1) % count)
{
float ratio = (i > count / 2) ? max : min; DWORD startTime = GetTickCount();
while (GetTickCount() - startTime < ratio * totalTime);
Sleep((1 - ratio) * totalTime);
}
} void main()
{
// ===============【设置进程所在cpu】=================
SetProcessAffinityMask(GetCurrentProcess(), 1);
DrawLinear();
//DrawSin();
//DrawSquareWave();
}

參考文章

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

最新文章

  1. iOS之2016面试题二
  2. UI第八节——UISegmentedControl
  3. stm32cube--ADC单次转换
  4. Webalizer解析nginx基本配置
  5. Android -- Properties使用
  6. array_count_values函数
  7. tcpdump命令--实用篇
  8. Hbase源码分析:Hbase UI中Requests Per Second的具体含义
  9. 对openflow 1.0协议的扩展
  10. SCSI磁盘标准的架构与文档
  11. Bottle源码阅读笔记(二):路由
  12. 将eclipse左边目录结构改为 树形结构
  13. Swift3中数组创建方法
  14. 高级软件工程2017第6次作业--团队项目:Alpha阶段综合报告
  15. day23:类的命名空间和组合
  16. 微信小程序轮播图组件 swiper,swiper-item及轮播图片自适应
  17. Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用.
  18. Shiro学习笔记(二)
  19. js中的变量作用域问题
  20. hive-内部表和外部表 对比

热门文章

  1. HTML中获取input中单选按钮radio数据(性别例子)
  2. ios之数据持久化
  3. node.js从入门到放弃(一)
  4. 客户端和服务器最多能发送和接收多少TCP连接数?
  5. curl 模拟post请求
  6. 同一SQL语句在PLSQL Developer与SQL * PLUS工具中执行结果不一致
  7. saltstack快速部署
  8. /etc/rc.d启动目录详解
  9. java io-----转
  10. 数据归一化Feature Scaling