| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1429 人关注过本帖
标题:微软面试题:让任务管理器画出正弦曲线 有代码求解释~
只看楼主 加入收藏
qiankai
Rank: 2
等 级:论坛游民
帖 子:35
专家分:49
注 册:2012-4-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
微软面试题:让任务管理器画出正弦曲线 有代码求解释~
#include <stdio.h>  
#include <stdlib.h>  
#include <math.h>  
#include <Windows.h>  
  
const double PI = 3.1415926;  
const int FREQUENCY = 360;  
const int AMPLITUDE = 100;  
  
int main()  
{  
   printf("Sine usage of CPU\n");  
    double dPiece = 2*PI / FREQUENCY;  
   DWORD dwWork, dwTick;  
    while(1)  
   {  
        int i;     
        for( i = 0; i < FREQUENCY; i++ ) {  
            dwTick = GetTickCount();  
           dwWork =(DWORD)(AMPLITUDE * (sin(dPiece * i) + 1));           
           while(GetTickCount() - dwTick <= dwWork)  
                ;  
           Sleep(2*AMPLITUDE - dwWork);  
       }  
    }  
   return 0;  
}  
看不懂,求解释~
搜索更多相关主题的帖子: 面试 微软 任务管理器 include double 
2013-03-17 21:55
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:1 
除了宏定义就是库函数了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-03-17 22:05
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
AMPLITUDE
这个不太明白什么意思

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-18 08:25
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
任务管理器也能 画曲线  表示不懂

DO IT YOURSELF !
2013-03-18 08:51
王捉熊
Rank: 2
等 级:论坛游民
帖 子:46
专家分:61
注 册:2012-10-23
收藏
得分:0 
好多地方看不懂,求大神解释

新手上路,说错请勿见怪!
2013-03-18 09:05
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:10 
任务管理器画正弦曲线,首先要清楚任务管理器性能的曲线代表的是什么:它是指CPU的使用率
首先看下 (sin(dPiece * i) + 1)为[0,2]
dwWork的最大最小值 [0-200]
while(GetTickCount() - dwTick <= dwWork)则是对CPU的使用率
Sleep(2*AMPLITUDE - dwWork);是把剩余的时间还给CPU

所以上面代码大致意思就是周期的在200ms里 程序对CPU的使用率


由上可见,得出一个结论 CPU使用率虚拟的横坐标1等于0.2秒? 也就是说该曲线刷新周期为0.2秒??
有谁清楚的?

[ 本帖最后由 hahayezhe 于 2013-3-18 09:12 编辑 ]
2013-03-18 09:06
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
主要的思想是做个死循环 占用cpu,把任务管理器的cpu使用率波动改变。

很好理解吧。

推荐看下《编程之美》 这本书有很好的解析

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-18 09:35
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:3 
以下是引用yuccn在2013-3-18 09:35:13的发言:

主要的思想是做个死循环 占用cpu,把任务管理器的cpu使用率波动改变。

很好理解吧。

推荐看下《编程之美》 这本书有很好的解析

这个我大概猜到了,就是占着CPU知道sin的那个值,呵呵

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-18 12:50
qiankai
Rank: 2
等 级:论坛游民
帖 子:35
专家分:49
注 册:2012-4-22
收藏
得分:0 
各位大神,关于这个有一个地方不太明白。CPU使用率每次更新显示的数据是是不是dwWork和dwTick在CPU使用率更新的时间单元格共同作用的结果?也就是说死循环的时间多一点CPU的使用率就高点,Sleep函数执行的时间多一点CPU的使用率就低点,可以这样理解吗?
2013-03-19 15:11
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:1 
以下是引用hahayezhe在2013-3-18 09:06:41的发言:

任务管理器画正弦曲线,首先要清楚任务管理器性能的曲线代表的是什么:它是指CPU的使用率
首先看下 (sin(dPiece * i) + 1)为[0,2]
dwWork的最大最小值 [0-200]
while(GetTickCount() - dwTick <= dwWork)则是对CPU的使用率
Sleep(2*AMPLITUDE - dwWork);是把剩余的时间还给CPU

所以上面代码大致意思就是周期的在200ms里 程序对CPU的使用率


由上可见,得出一个结论 CPU使用率虚拟的横坐标1等于0.2秒? 也就是说该曲线刷新周期为0.2秒??
有谁清楚的?



人为的有意的控制CPU的使用率。。。一下高计算   一下低计算      曲线就出来。。。

自由、民主、宪政!
2013-03-20 09:20
快速回复:微软面试题:让任务管理器画出正弦曲线 有代码求解释~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021509 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved