在《编程之美》上看过一道面试题就是要求:输出cup占用率的曲线图

今天看到了一篇文章就试试看看:

#include <iostream>
#include <cmath>
#include <ctime>
#include <windows.h> using namespace std; //得到循环0xFFFFFFFF次用的秒数
unsigned int test()
{
unsigned int c = 0xFFFFFFFF; time_t t1, t2;
time(&t1); for (unsigned int i = ; i < c; i++)
;
time(&t2);
return (unsigned int)(t2 - t1); } #define T 20000 //周期时间 20秒
#define C 100 //采样点时间间隔
#define PI 3.1415 //PI const unsigned int _count = 0xFFFFFFFF / (test() * ); //采样间隔可以执行的循环数目 //考虑到了当前系统的运行程序
const unsigned int N = T / C; //周期内采样点数目
unsigned int v[N] = { }; //所有采样点连续执行循环数
unsigned int mt[N] = { }; //所有采样点休眠毫秒数 int main()
{
//指定运行CPU
SetThreadAffinityMask(GetCurrentThread(), ); for (int i = ; i < N; i++)
{
double x = * PI * i / N;
double r = (sin(x) + ) / ; mt[i] = C - r * C; //空闲时间
v[i] = r * C * _count; //忙的时间,考虑当前cup使用情况
}
for (;;)
{
for (int i = ; i < N; i++)
{
for (int j = ; j < v[i]; j++)
;
Sleep(mt[i]);
}
}
}

实验结果:指定运行cup和核数有关吧

首先什么是CPU占用率?

在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。

因此可以写个程序,在一个刷新周期中,一会儿忙,一会儿闲,调节忙/闲比例,就可以控制CPU占有率!

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

1.    CPU的占用率固定在50%,为一条直线;

2.    CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);

3.    CPU的占用率状态是一个正弦曲线。

直线cpu:使x=0即可:

#include <iostream>
#include <cmath>
#include <ctime>
#include <windows.h> using namespace std; //得到循环0xFFFFFFFF次用的秒数
unsigned int test()
{
unsigned int c = 0xFFFFFFFF; time_t t1, t2;
time(&t1); for (unsigned int i = ; i < c; i++)
;
time(&t2);
return (unsigned int)(t2 - t1); } #define T 20000 //周期时间 20秒
#define C 100 //采样点时间间隔
#define PI 3.1415 //PI const unsigned int _count = 0xFFFFFFFF / (test() * ); //采样间隔可以执行的循环数目
const unsigned int N = T / C; //周期内采样点数目
unsigned int v[N] = { }; //所有采样点连续执行循环数
unsigned int mt[N] = { }; //所有采样点休眠毫秒数 int main()
{
//指定运行CPU
SetThreadAffinityMask(GetCurrentThread(), ); ////正弦cpu
//for (int i = 0; i < N; i++)
//{
// double x = 2 * PI * i / N;
// double r = (sin(x) + 1) / 2; // mt[i] = C - r * C;
// v[i] = r * C * _count;
//}
//for (;;)
//{
// for (int i = 0; i < N; i++)
// {
// for (int j = 0; j < v[i]; j++)
// ;
// Sleep(mt[i]);
// }
//} //直线cpu
for (int i = ; i < N; i++)
{
double x = * PI * i / N;
x = ;
double r = (sin(x) + ) / ; mt[i] = C - r * C;
v[i] = r * C * _count;
}
for (;;)
{
for (int i = ; i < N; i++)
{
for (int j = ; j < v[i]; j++)
;
Sleep(mt[i]);
}
}
} //没有考虑现在系统cpu使用情况
//#include <windows.h>
//#include <math.h>
//int main(void)
//{
// SetThreadAffinityMask(GetCurrentProcess(), 1);
// const double SPLIT = 0.01;
// const int COUNT = 200;
// const double PI = 3.14159265;
// const int INTERVAL = 300;
// DWORD busySpan[COUNT]; //array of busy time
// DWORD idleSpan[COUNT]; //array of idle time
// int half = INTERVAL / 2;
// double radian = 0.0;
// for (int i = 0; i < COUNT; i++)
// {
// busySpan[i] = (DWORD)(half + (sin(PI*radian)*half));
// idleSpan[i] = INTERVAL - busySpan[i];
// radian += SPLIT;
// }
// DWORD startTime = 0;
// int j = 0;
// while (true)
// {
// j = j%COUNT;
// startTime = GetTickCount();
// while ((GetTickCount() - startTime) <= busySpan[j])
// ;
// Sleep(idleSpan[j]);
// j++;
// }
// return 0;
//}

结果:

reference:

CPU正弦曲线

控制CUP占用率曲线的更多相关文章

  1. 控制CPU占用率曲线

    编程之美的第一个问题,我的机器是双核的,用文中的代码,得到的曲线波动比较大额,受其他进程的影响比较大.文中提到10ms接近windows的调度时间片,如果选得太小,会造成线程被频繁唤醒和挂起,造成内核 ...

  2. 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥

    http://blog.csdn.net/pipisorry/article/details/36189155 <strong><span style="font-size ...

  3. 编程之美_1.1 让CPU占用率曲线听你指挥

    听到有人说让要写一个程序,让用户来决定Windows任务管理器的CPU占用率. 觉得很好奇.但第一个想法就是写个死循环.哈哈.不知道具体的占用率是多少,但至少能保证在程序运行时,CPU的占用率终会稳定 ...

  4. 让cpu占用率曲线听你指挥(多核处理器)

    编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html  [目录] 不考 ...

  5. 第1章 游戏之乐——让CPU占用率曲线听你指挥

    让CPU占用率曲线听你指挥 写一个程序,让用于来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: CPU的占用率固定 ...

  6. JVM CUP占用率过高排除方法,windows环境

    jdk自带的jvisualvm可以看到程序CPU使用率,但是无法确定具体的线程,想要确定到具体的线程需要借用到微软的Process Explorer 具体排除方法: 一:打开资源管理器,找到cup占用 ...

  7. 1.1 让CPU占用率曲线听你指挥[cpu manager]

    [本文链接] http://www.cnblogs.com/hellogiser/p/cpu-manager.html [题目] 写一个程序,让用户来决定Windows任务管理器(Task Manag ...

  8. 编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器)

    [目录] 不考虑其他进程,cpu画正弦曲线 获取总体cpu利用率 获取多核处理器单个cpu利用率 考虑其他进程,cpu画正弦曲线 下面的程序针对多核处理器,可以设置让任何一个cpu显示相应的曲线(本文 ...

  9. 让CPU占用率曲线听你指挥

    使用GetTickCount()和Sleep(): Code#include <stdio.h> #include <unistd.h> #include <time.h ...

随机推荐

  1. Python选修课第二届Turtle绘图大赛~~画猫猫

    (a)20161401167 夏思敏 20161401179 段梦格 (b)代码执行视频链接 点击查看:Python使用turtle库画猫猫 (c)程序源码 import turtle turtle. ...

  2. day03 set集合,文件操作,字符编码以及函数式编程

    嗯哼,第三天了 我们来get 下新技能,集合,个人认为集合就是用来list 比较的,就是把list 转换为set 然后做一些列表的比较啊求差值啊什么的. 先看怎么生成集合: list_s = [1,3 ...

  3. Flash中国地图 开放源码

    Flash中国地图,以Object为数据源,便于实现基于中国地图的可视化项目. 特征: swc,便于导入到Flex项目中 数据源为Object,比XML更方便 数据驱动的地图块颜色和Hover颜色 可 ...

  4. Leetcode 482.密钥格式化

    密钥格式化 给定一个密钥字符串S,只包含字母,数字以及 '-'(破折号).N 个 '-' 将字符串分成了 N+1 组.给定一个数字 K,重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符 ...

  5. oracle中的dual表

    dual表是和Oracle数据字典一起创建的.它实际上只包含dummy这一个column,并且只有一条记录,这条记录的值是X. X dual表的owner是SYS,但所有用户都可以访问它.Althou ...

  6. [LOJ#113]最大异或和

    [LOJ#113]最大异或和 试题描述 这是一道模板题. 给由 n 个数组成的一个可重集 S,求一个集合 T⊆S,使 T1 xor T2 xor … xor T|T| 最大 输入 第一行一个数 n.第 ...

  7. BZOJ4571 [Scoi2016]美味 【主席树】

    题目 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为第 ...

  8. websphere启用高速缓存导致问题

    环境:websphere 7 一个流程主页,里面include了上面这个页面,内部有一个iframe: 现象:项目发布在测试环境中,打开流程主页时,里面iframe内页显示不出来: 同样的jsp页面, ...

  9. [转] Makefile 基础 (4) —— Makefile 书写命令

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  10. cf496D Tennis Game

    Petya and Gena love playing table tennis. A single match is played according to the following rules: ...