游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4499|回复: 6

求助:关于OPENGL程序,CPU占用率的问题

[复制链接]

8

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2005-12-21 10:49:00 | 显示全部楼层 |阅读模式
为什么我做出来的程序只要在桌面上放着,CPU占用率就是100%啊,而且把一些浮动窗口放上面的时候,浮动窗口也总是不停的闪,是不是OPENGL在不停的绘制啊,而我看其他人的程序却不是这样的,请问这个和什么有关系呢,该怎么控制呢,期望哪位大侠指点一下,谢谢了!!!!!!

8

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2005-12-21 15:12:00 | 显示全部楼层

Re:求助:关于OPENGL程序,CPU占用率的问题

问题解决了,自己动手,丰衣足食,哈哈


        if (!m_pMainWnd)
                AfxPostQuitMessage(0);

        MSG msg;
        CMainFrame* pFrame = STATIC_DOWNCAST ( CMainFrame, m_pMainWnd );

        if ( QueryPerformanceFrequency ( ( LARGE_INTEGER *) &m_lPerfCounter ) ) {

                // yes, set m_dwTimeCount and timer choice flag
                m_bPerFlag = TRUE;
                m_dwTimeCount = unsigned long(m_lPerfCounter / m_lFramesPerSecond);
                QueryPerformanceCounter ( ( LARGE_INTEGER * ) &m_lNextTime );
                m_dTimeScale = 1.0 / m_lPerfCounter;
        } else  {
                // no performance counter, read in using timeGetTime

                m_lNextTime = timeGetTime ();
                m_dTimeScale = 0.001;
        }
        // save time of last frame

        m_lLastTime = m_lNextTime;

        while ( TRUE ) {
                //see if there is a message waiting

                if ( :eekMessage ( &msg, NULL, 0, 0, PM_NOREMOVE ) ) {
                        do //if there is pump all waiting
                        {
                                if ( !PumpMessage () )
                                        return ExitInstance ();
                        } while ( ::PeekMessage ( &msg, NULL, 0, 0, PM_NOREMOVE ) );
                } else
                {

                        // use the appropriate method to get time
                        // and calculate elapsed time since last frame

                        if ( m_bPerFlag )
                        {
                                QueryPerformanceCounter ( ( LARGE_INTEGER * ) &m_lCurTime );       
                        }
                        else
                        {
                                m_lCurTime=timeGetTime ();
                        }

                        // is it time to render the frame?

                        if ( m_lCurTime > m_lNextTime )
                        {

                                // calculate elapsed time

                                m_dTimeElapsed = ( m_lCurTime - m_lLastTime ) * m_dTimeScale;
                               

                                // save frame time

                                m_lLastTime = m_lCurTime;
                               
                                // yes, render the frame

                                if ( !pFrame->m_bAppIsActive )
                                        WaitMessage();
                                else
                                        pFrame->RenderGLScene ();

                                // set time for next frame

                                m_lNextTime = m_lCurTime + m_dwTimeCount;

                        } // end if

                } // end if else

        } // end while
        return msg.wParam;

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2005-12-21 15:17:00 | 显示全部楼层

Re:求助:关于OPENGL程序,CPU占用率的问题

不活动的时候一样的绘制

0

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2006-2-27 11:50:00 | 显示全部楼层

Re:求助:关于OPENGL程序,CPU占用率的问题

原因是什么呢?

你修改的是哪里?

8

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2006-3-2 11:14:00 | 显示全部楼层

Re:求助:关于OPENGL程序,CPU占用率的问题

这个问题可以简单的处理,也可以复杂的处理:
简单的:直接sleep();或者让窗口停止刷新,停止RENDER就好了。
稍复杂的:自己先设定一个刷新频率,然后把剩余的时间SLEEP()掉。这个复杂就复杂在计算剩余时间的问题。

      如果有说得不对的地方,请高手指点

8

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2006-3-3 09:44:00 | 显示全部楼层

Re:求助:关于OPENGL程序,CPU占用率的问题

FPS == Frames Per Second == 帧/每秒

5

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2006-3-4 13:48:00 | 显示全部楼层

Re:求助:关于OPENGL程序,CPU占用率的问题

俺初学OGL,这个帧频设置是怎么实现的?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 19:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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