编程之美 1.1 让CPU占用率曲线听你的指挥
2013-10-23 16:22
477 查看
编程之美 1.1 让CPU占用率曲线听你的指挥
本题是编程之美的第一题, 好的开始是成功的一半.本文实现了"正弦曲线"的部分, 使用单核, CPU可以跑出一条正弦曲线.
算法的基本思想是:
首先计算正弦曲线的"busy time"和"idle time", 然后通过while()空循环和Sleep()函数去控制忙和闲的部分, 最后观察CPU的变化.
代码(包含注释)
/*From Beauty of Programming, By C.L.Wang*/ /*编程之美1.1 让CPU占用率曲线听你的指挥*/ /*计算busy和idle的时间, 使用空循环和sleep()进行处理*/ #include "stdafx.h" #include <iostream> #include <cstdlib> #include <cmath> #include <windows.h> const int SAMPLING_COUNT = 200; //抽样点数量 const double PI = 3.1415926535; const int TOTAL_AMPLITUDE = 300; //整个振幅 int main(void){ SetThreadAffinityMask(GetCurrentThread(), 1); //使用单核 DWORD busySpan[SAMPLING_COUNT]; int amplitude= TOTAL_AMPLITUDE/2; //振幅 double radian= 0.0; //半径 double radianIncrement = 2.0 / static_cast<double>(SAMPLING_COUNT); //半径增加量 for(int i=0; i<SAMPLING_COUNT; i++){ /*系统忙的时间在2倍振幅和0之间*/ busySpan[i] = (DWORD)(amplitude+(sin(PI*radian)*amplitude)); radian += radianIncrement; //振幅在0-2之间 std::cout << "Busy Time: " << busySpan[i] << " " << "Idle Time: " << TOTAL_AMPLITUDE-busySpan[i] << std::endl; } DWORD startTime = 0; /*无限循环, 忙用空循环, 空闲用sleep()*/ for(int j=0; ; j=(j+1)%SAMPLING_COUNT){ startTime = GetTickCount(); while((GetTickCount()-startTime)<= busySpan[j]) //Busy ; Sleep(TOTAL_AMPLITUDE-busySpan[j]); //Idle } return 0; }
本文出自 “永不言弃” 博客,请务必保留此出处http://spikeking.blog.51cto.com/5252771/1388052
相关文章推荐
- springMVC自定义json序列化格式,将Date格式化为字符串
- c++for循环小疑惑
- java截取字符串,截串,substring和split,分割字母和数字,正则缝隙
- Win::gVim配置Python编译环境
- c# 数据类型
- Struts 2 学习笔记1
- Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用
- python中的yield
- JAVA 动态(手动)加载jar文件
- ASP.NET常用代码集合
- C语言编程需要注意的64位和32机器的区别
- Qt 使用QPluginLoader 加载外部dll的方法笔记
- java数组遍历 删除remove
- java加解密
- MyEclipse使用技巧详解
- ajax与302响应代码测试
- c++ replacement new 操作
- java笔记
- myeclipse报异常:java.lang.OutOfMemoryError: Java heap space
- C语言单元测试工具Check使用注意事项