关于cpu使用率的问题

Aliao523 2009-11-18 10:08:04
我编了个游戏程序,运行时cpu使用率很高,占了50%。我的cpu是双核的,也就是说有一个处理器被100%占用。可奇怪的是,当我同时运行其他程序,例如千千静听,或者播放视频文件时,cpu使用率却降低了。我的程序的使用率是1%~2%,总的使用率10%~20%。这是为什么呢?请高手解释一下
...全文
182 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yorkzjy 2009-11-28
  • 打赏
  • 举报
回复
你肯定你的CPU是不会变频的?
pywepe 2009-11-27
  • 打赏
  • 举报
回复
肯定是你的程序出了问题
Aliao523 2009-11-27
  • 打赏
  • 举报
回复
是在onpaint里边没错,但我运行其他程序的时候并没有遮挡住游戏窗口,游戏窗口为当前的激活窗口,我也在操作游戏
[Quote=引用 19 楼 cphj 的回复:]

你这些代码在什么消息响应函数里面,如果是在OnPaint之类的里面,那么如果运行其他程序,遮挡了游戏窗口,那么这段代码就不会执行了,所以CPU占用率就下来了

[/Quote]
cphj 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 aliao523 的回复:]
注销下面的绘图代码后,cpu使用率就保持在1%左右,不管有没有运行其他程序
for(int i = pushing_ball;i>=0;i--)
{
  if (ballArray[i].x)
  {
tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,ball_w,ball_h,&BALL_DC,0,0,SRCAND);
if (ballArray[i].available)
  tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,ball_w,ball_h,&BALL_DC,ball_w*ballArray[i].Kind,0,SRCPAINT);
else
          tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,ball_w,ball_h,&BALL_Splited_DC,ball_w*ballArray[i].Kind,0,SRCPAINT);
if (ballArray[i].features)
          tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,32,32,&BALL_Super_DC,32*(ballArray[i].features-1),0,SRCCOPY);
  }
}


ballArray 是我定义的数组,类型为自己定义的结构体,定义如下:
struct BALL{
int Kind;//类型
int x;
int y;
int features;
bool available;
};

[/Quote]

你这些代码在什么消息响应函数里面,如果是在OnPaint之类的里面,那么如果运行其他程序,遮挡了游戏窗口,那么这段代码就不会执行了,所以CPU占用率就下来了
forster 2009-11-18
  • 打赏
  • 举报
回复
音频和视频都是和中断有关的 他们的应用程序的线程优先及肯定比你高
Aliao523 2009-11-18
  • 打赏
  • 举报
回复
注销下面的绘图代码后,cpu使用率就保持在1%左右,不管有没有运行其他程序
for(int i = pushing_ball;i>=0;i--)
{
if (ballArray[i].x)
{
tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,ball_w,ball_h,&BALL_DC,0,0,SRCAND);
if (ballArray[i].available)
tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,ball_w,ball_h,&BALL_DC,ball_w*ballArray[i].Kind,0,SRCPAINT);
else
tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,ball_w,ball_h,&BALL_Splited_DC,ball_w*ballArray[i].Kind,0,SRCPAINT);
if (ballArray[i].features)
tempPDC.BitBlt(ballArray[i].x,ballArray[i].y,32,32,&BALL_Super_DC,32*(ballArray[i].features-1),0,SRCCOPY);
}
}


ballArray 是我定义的数组,类型为自己定义的结构体,定义如下:
struct BALL{
int Kind;//类型
int x;
int y;
int features;
bool available;
};

[Quote=引用 4 楼 na2650945 的回复:]
代码上来试试。

[/Quote]
cphj 2009-11-18
  • 打赏
  • 举报
回复
测量的条件一样吗?

如果打开其他程序,游戏程序会不会挂起,于是基本没有被调度到
qq532008274 2009-11-18
  • 打赏
  • 举报
回复
我觉得你的代码可能影响了CPU的运作了。他就像病毒一样的工作。你要看你的游戏代码是不是出问题》
rlxtime 2009-11-18
  • 打赏
  • 举报
回复
不懂
shellfish567 2009-11-18
  • 打赏
  • 举报
回复
个人猜测,纯属虚构:系统检测CPU占用率是根据检测CPU外部寄存器占有率来计算的,当你使用你的游戏的时候,可能很多全局变量占有住了这些寄存器,没其他程序来抢,所以显示占有率很高。当你运行其他程序的时候,由于CPU使用时间片问题,这些寄存器被轮流使用,在内存与寄存器中转,全局变量被标记为voliate,于是看起来很多时间内寄存器处于空闲状态,于是CPU使用率看起来反而降低了
herman~~ 2009-11-18
  • 打赏
  • 举报
回复
呵呵 搞不懂
whg01 2009-11-18
  • 打赏
  • 举报
回复
按模块注释代码,找到是哪里影响的。
na2650945 2009-11-18
  • 打赏
  • 举报
回复
代码上来试试。
loveour 2009-11-18
  • 打赏
  • 举报
回复
不了解,关注
香蕉裤衩 2009-11-18
  • 打赏
  • 举报
回复
抢劫?
mengde007 2009-11-18
  • 打赏
  • 举报
回复
确实很怪异;
whg01 2009-11-18
  • 打赏
  • 举报
回复
http://book.77169.org/70/34694.htm
看看这个。
macrojj 2009-11-18
  • 打赏
  • 举报
回复
使用率 就是一个率。当有其他程序的时候,是不是分母不变,但是分子少了
rw_safe 2009-11-18
  • 打赏
  • 举报
回复
检查线程中是不是没有加入sleep

检查重绘的频率
donglq 2009-11-18
  • 打赏
  • 举报
回复
不懂 
加载更多回复(2)

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧