在《编程之美》上看过一道面试题就是要求:输出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. webdriver高级应用- 精确比较页面截图图片

    判断两张图是否完全一致,如果存在任何不一致,会认为图片不匹配,代码如下: #encoding=utf-8 from selenium import webdriver import unittest, ...

  2. Leetcode21--->Merge Two Sorted Lists(合并两个排序的单链表)

    题目: 给出两个排序的单链表,合并两个单链表,返回合并后的结果: 解题思路: 解法还是很简单的,但是需要注意以下几点: 1.  如果两个链表都空,则返回null; 2.  如果链表1空,则返回链表2的 ...

  3. c++中set容器的功能及应用。

    set的特性是,所有元素都会根据元素的键值自动排序(默认为升序),set中不允许两个元素有相同的键值. set基本操作: 1.头文件 #include<set>. 注:一定要加上using ...

  4. iOS学习笔记47-Swift(七)泛型

    一.Swift泛型介绍 泛型是为Swift编程灵活性的一种语法,在函数.枚举.结构体.类中都得到充分的应用,它的引入可以起到占位符的作用,当类型暂时不确定的,只有等到调用函数时才能确定具体类型的时候可 ...

  5. 【bzoj4184】shallot 线段树+高斯消元动态维护线性基

    题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...

  6. 【Luogu】P1903数颜色(带修改莫队)

    题目链接 带修改莫队模板. 加一个变量记录现在是第几次修改,看看当前枚举的询问是第几次修改,改少了就改过去,改多了就改回来. 话说我栈用成队列了能过样例?!!!! 从此深信一句话:样例是出题人精心设计 ...

  7. 都系坤坤-微信助手V 0.1,解放双手发信息

    端午节刚过,相信大家在端午节都收到不少微信祝福信息,有复制长篇大论的祝福语群发的,有人工手打的简单祝福群发,我更喜欢人工手打带上称呼的祝福信息,这样看起来更加亲切. 那么问题来了,当你的通讯录里好友多 ...

  8. d3 画简单的柱形图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 挑战程序设计2 KD树

    Range Query - Range Search (kD Tree) Time Limit : 1 sec, Memory Limit : 262144 KB Japanese version i ...

  10. WCF的学习之旅

    一.WCF的简单介绍  Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是MS为SOA (S ...