注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

fanhq666的博客

Fan-Fun

 
 
 

日志

 
 

让CPU占用率画正弦曲线  

2010-11-04 21:40:21|  分类: 程序 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
让CPU占用率画正弦曲线 - fanhq666 - fanhq666的博客

 看看上面这张图片,有意思吧。

用程序控制cpu的占用率是一个很古老但有趣的问题。

例如:如何写一个程序占用一半的处理器时间?

有人会这样写:

for (int i=0;1;i++){

   if (i&1){for (int j=0;j<10000;j++);}

   else

之后就卡壳了:else后面该写什么了呢?

 

有人有方法:使用windows.h里面的那个Sleep函数就行了:

for (int i=0;1;i++){

   if (i&1){for (int j=0;j<10000;j++);}

   else Sleep(

之后又卡壳了:到底该休眠几毫秒才能恰好占用一半的处理器呢?

 

之后,又有人,包括我在内,想了一个办法:使用time.h里的clock函数得到程序运行的时间,工作若干毫秒,之后休息若干毫秒。

for (int i=0;1;i++){

    if (i&2){

        int t1=clock();

       while (clock()-t1<100)for (int j=0;j<10000;j++);

    }else Sleep(100);

}

运行,发现工作得很好!

 

于是,就可以开始正弦曲线的绘制了:

  int span[]={0,31,61,90,117,141,161,178,190,197,200,197,190,178,161,141,117,90,61,31,0};
  while (1){
  for (int i=0;i*sizeof(span[0])<sizeof(span);i++){
   for (int j=0;j<5;j++){
    int t1=clock();
    while (clock()-t1<span[i]){
     for (int k=0;k<10000;k++);
    }
    Sleep(200-span[i]);
   }
  }
 }

 

由于taskmgr的cpu使用率刷新得挺慢的,所以我们不用十分精准的计时和休眠函数即可得到令人满意的结果。

 

当然了,最终画出的图像还是有一点瑕疵的。怎么办呢?等待以后去解决吧。

  评论这张
 
阅读(1813)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017