zoukankan      html  css  js  c++  java
  • 关于MFC框架程序中CWinApp::OnIdle

        很早之前就发现,我写的图形引擎在MFC框架程序中的刷帧率始终在60FPS左右.好在自己的程序对刷帧率的要求不是很高,所以一直没有太过纠结此事.直到今天看了别人的程序才发现应该在函数CWinApp::OnIdle()中进行刷帧操作.而之前我是先注册个时钟响应事件SetTimer(1001, 1, NULL);然后在CView::OnTimer()中或者是CDialog::OnTimer()进行刷帧操作.这样其刷帧率得不到保证.也在::OnPaint()函数中进行刷帧操作,一样的问题.之前我也觉得应该有个OnIdle之类的函数,可是在CView对象中只找到了个LRESULT OnKickIdle( WPARAM wparam, LPARAM lparam );重载后发现该函数根本没有调用.窘啊,写了这么多年程序,发现对MFC还是了解的不透.不过给自己找个借口,我写的MFC的程序也不是太多.

    转帖段对CWinApp::OnIdle()函数的解释:

    virtual BOOL CWinApp::OnIdle( LONG lCount );
    返回值:如果要接收更多的空闲处理时间,则返回非零值;如果不需要更多的空闲时间则返回0。
    参数:

    lCount 该参数是一个计数值,当应用程序的消息队列为空,OnIdle函数被调用时,该计数值就增加1。每当一条新消息被处理时,该计数值就被复位为0。你可以使用lCount参数来确定应用程序不处理消息时空闲时间的相对长度。

    说明:
          如果要执行空闲时处理,则重载这个成员函数。当应用程序的消息队列为空时,OnIdle就在缺省的消息循环中被调用。可以用重载函数来调用自己的后台空闲处理任务。OnIdle应返回0以表明不需要更多的空闲处理时间。当消息队列为空时,OnIdle每被调用一次lCount参数就增加,而每处理一条新消息lCount就被复位为0。你可以根据这个计数值调用不同的空闲处理例程。

     

    最后发下我的一个程序修改前后的刷帧率对比:

     

  • 相关阅读:
    2020 浏览器市场份额
    Web高级 JavaScript中的算法
    Web高级 JavaScript中的数据结构
    JavaScript 集合对象
    Web高级 网站安全
    Web高级 HTTP报文
    Web高级 Eventloop和事件执行顺序
    Web高级 Ajax和跨域CORS
    javaScript 继承
    JavaScript 事件基础
  • 原文地址:https://www.cnblogs.com/WhyEngine/p/3543505.html
Copyright © 2011-2022 走看看