编程之美 1.1 让CPU占用率曲线听你的指挥
2013-10-23 16:22
441 查看
编程之美 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;
}
相关文章推荐
- [Android]在代码里运行另一个程序的方法
- 网页恶意代码的预防
- 高手写的Tracer-Flash代码调试类代码下载
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- CreateWeb.vbs 代码
- 我的服务器SQL2000的sqlserver占用了90%的cpu,怎么查是那个库?
- MySQL服务器进程CPU占用100%的解决方法
- 使用MySQL Slow Log来解决MySQL CPU占用高的问题
- 更有效率的css代码编写第1/3页
- 笔记本下什么是迅驰处理器(cpu)相关资料第1/2页
- SQL语言查询基础:连接查询 联合查询 代码
- doscan.exe进程占用了大量的CPU和内存的解决方法
- 论坛头像随机变换代码
- .NET 常用功能和代码小结
- asp编程中常用的javascript辅助代码第1/2页
- C#超实用代码段合集
- Javascript代码在页面加载时的执行顺序介绍
- 我的论坛源代码(二)
- 无边框窗口代码详解