编程之美 之 让CPU占用率听你指挥
昨天在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占用率曲线听你指挥
编程之美 之 让CPU占用率听你指挥的更多相关文章
- Shell编程检测监控mysql的CPU占用率
shell编程很强大! 网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法就是重启mysql服务.由于这种事具有不 ...
- 编程之美_1.1 让CPU占用率曲线听你指挥
听到有人说让要写一个程序,让用户来决定Windows任务管理器的CPU占用率. 觉得很好奇.但第一个想法就是写个死循环.哈哈.不知道具体的占用率是多少,但至少能保证在程序运行时,CPU的占用率终会稳定 ...
- 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥
http://blog.csdn.net/pipisorry/article/details/36189155 <strong><span style="font-size ...
- 《编程之美》学习笔记——指挥CPU占用率
问题: 写一个程序.让用户来决定Windows任务管理器(Task Manager)的CPU占用率(单核). 有下面几种情况: 1.CPU占用率固定在50%,为一条直线 2.CPU的占用率为一条直线, ...
- 让cpu占用率曲线听你指挥(多核处理器)
编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html [目录] 不考 ...
- shell脚本检测监控mysql的CPU占用率
网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法 就是重启mysql服务.由于这种事具有不可预见性,我们不知道什 ...
- 浅析 Pycharm 内存、cpu 占用率
浅析 Pycharm 内存.cpu 占用率 本机配置参数: ------------------------------------------ Windows 10 专业版 X64 ----- ...
- liteos CPU占用率(十六)
1. 概述 1.1 基本概念 CPU(中央处理器, Central Processing Unit)占用率可以分为系统CPU占用率和任务CPU占用率两种. 系统CPU占用率(CPU Percent)是 ...
- 查看Windows下引起Oracle CPU占用率高的神器-qslice
前言: qslice是一个win2000的工具包,能分析进程的cpu占用率,我们用于分析oracle的性能 这是绿色的软件无需安装. 我们经常会碰到oracle的CPU占用居高不下,无法快速定位到问题 ...
随机推荐
- [LUOGU] P1962 斐波那契数列
求斐波那契第n项. [f(n-1) f(n)] * [0,1] = [f(n) f(n+1)] [1,1] 由此原理,根据矩阵乘法的结合律,用快速幂算出中间那个矩阵的n次方即可. 快速幂本质和普通快速 ...
- 宝塔apache配置
apache配置 <VirtualHost *:80> ServerAdmin webmaster@example.com DocumentRoot "/www/wwwroot/ ...
- 解决每次打开pycharm直接进入项目的方法
- Linux 基本操作指南
Linux基本操作 1. su 切换用户 2.exit 退出当前登录用户 3.useradd 用户名 -m 在home目录下 创建一个和用户名同名的目录,并添加一个用户 (有root权限才能 ...
- 06 PhantomJS浏览器
PhantomtomJS PhantomJS是一款无界面浏览器,其自动化操作流程和谷歌浏览器是一致的.由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用sa ...
- 关于Hibernate中No row with the given identifier exists问题的原因及解决
今天遇到一个bug,截图如下 有两张表,table1和table2.产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-one unique=&q ...
- JS获取粘贴内容
http://classjs.com/2013/03/05/js%E8%8E%B7%E5%8F%96%E7%B2%98%E8%B4%B4%E5%86%85%E5%AE%B9/ 思路:在编辑环境中,粘贴 ...
- zoj 2001 Adding Reversed Numbers
Adding Reversed Numbers Time Limit: 2 Seconds Memory Limit: 65536 KB The Antique Comedians of M ...
- 使用 wsgiref 创建WSGI APP
wsgify装饰器将一个普通函数转变成WSGI应用程序. class webob.dec.wsgify(func=None, RequestClass=None, args=(), kwargs=No ...
- 77. Spring Boot Use Thymeleaf 3【从零开始学Spring Boot】
[原创文章,转载请注明出处] Spring Boot默认选择的Thymeleaf是2.0版本的,那么如果我们就想要使用3.0版本或者说指定版本呢,那么怎么操作呢?在这里要说明下 3.0的配置在spri ...