游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: iwtjatpya

cpu使用100%,麻烦帮我看一下?

[复制链接]

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2007-7-30 23:10:00 | 显示全部楼层

Re:cpu使用100%,麻烦帮我看一下?

要不就固定帧数渲染
不要把所有的CPU时间都利用了啊

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2007-7-31 08:22:00 | 显示全部楼层

Re:cpu使用100%,麻烦帮我看一下?

说了怎么就不明白?

MSDN:Unlike GetMessage, the PeekMessage function does not wait for a message to be posted before returning.

也就是说,使用PeekMessage,函数并不等待消息,而使用GetMessage,函数会等待至系统有消息到来。

因此无论系统是否有消息,CPU的资源都被你占用了,CPU就是100%
            while( msg.message!=WM_QUIT )
            {
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
            } // CPU 100%


然而使用D3D,调用
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

    // Begin the scene
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        // End the scene
        g_pd3dDevice->EndScene();
    }

    // Present the backbuffer contents to the display
    g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );

却不会占用CPU资源,因此在微软的例子中
           while( msg.message!=WM_QUIT )
            {
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
                else // 注意这个动作为什么要用else
                    Render();
            }


这里CPU就不是100%了,但是如果你最小化窗口,这时候D3D设备实际上已经处于无效状态,也就是说Render函数中GPU并未处理CPU资源,而是让你的程序把CPU资源全部吃掉了,CPU又是100%。

因此系统的框架应该是这样的

while ( true )
{
  if (有系统消息)
  {
    处理系统消息;
  }
  else
  {
    if ( 有游戏本身的消息 )
    {
      处理游戏本身的消息;
    }
    if ( 如果需要渲染,比如设备丢失了,窗口最小化了就不能渲染了 )
    {
      渲染;
    }
    else
    {
      Sleep(X); // 把CPU资源让给其他的程序
    }
  }
}

上面的系统并不能完全保证CPU被合理利用,我们一般尽可能的不要让CPU达到100%(如果是双核就是50%呵呵),有一个简单的办法就是打开帧刷新同步。观察你的FPS,如果你的FPS小于屏幕的刷新频率,这样就有两种情况,一种是你正在创作一款伟大的游戏,游戏硬件设定超前,还有一种情况就是你的程序需要优化了。

上述内容前半部分可以参考,后面部分属于个人意见

2

主题

8

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2007-7-31 14:22:00 | 显示全部楼层

Re: cpu使用100%,麻烦帮我看一下?

再次感谢高手们!
    受教了,能不能把你们的QQ号留下,以后常联系
    我的QQ:173991904
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 15:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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