游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3059|回复: 8

游戏严重占用 CPU 资源的解决方案?

[复制链接]

7

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2008-5-20 22:33:00 | 显示全部楼层 |阅读模式


自己做的游戏占用 90%几的 CPU 资源,但是,我该释放的接口,临界区等都已经释放了啊。请问,这个问题出在哪儿,该如何解决呢?



谢谢

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-5-21 09:16:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

你的主循环有没有限制帧数?如果没有单核100%双核50%是正常的

0

主题

243

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
发表于 2008-5-21 09:33:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

所谓游戏,就是要榨干所有的可用资源,哇哈哈

7

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2008-5-21 12:44:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

我做的是运动类游戏,限制帧频 33帧/秒。可是,性能还是那样,似乎没有多大的改进的。

请问,有什么改进方案么?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-5-21 14:15:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

限帧一般在100左右比较合适,这样出让一些cpu资源给操作系统,简单的做法如下:
        __int64 cntsPerSec = 0;
        QueryPerformanceFrequency((LARGE_INTEGER*)&cntsPerSec);
        float secsPerCnt = 1.0f / (float)cntsPerSec;

        __int64 prevTimeStamp = 0;
        QueryPerformanceCounter((LARGE_INTEGER*)&prevTimeStamp);

__int64 currTimeStamp = 0;
                        QueryPerformanceCounter((LARGE_INTEGER*)&currTimeStamp);
                        float timeDelta = (currTimeStamp - prevTimeStamp)*secsPerCnt;  //循环一次的毫秒?


                        //将FPS钳制在100FPS左右,当然不那么精确,CPU足够强占用就少,弱的话当然占用也多了
                        DWORD d = 10;
                        d = d - timeDelta;
                        if(d>0 && d < 10)
                          Sleep(d);
...

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-5-22 13:22:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

Sleep();

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-5-23 22:36:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

限制帧归限帧,空while也100%CPU啊。sleep一下还差不多。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-5-24 08:20:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

限制帧数用的就是sleep啊,不过也可以自己写定时器,那个麻烦一些

1

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2008-5-24 09:39:00 | 显示全部楼层

Re:游戏严重占用 CPU 资源的解决方案?

在游戏有焦点的情况CPU的确很高,死循环的嘛。

如果你用ctrl + alt + del 来看 CPU的话,你可以在主循环用peekmessage,然后在wndproc里面失去焦点那个消息设一个全局标示符,如果没焦点就sleep,CPU这时候就低下来了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 10:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表