关于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。你可以根据这个计数值调用不同的空闲处理例程。

 

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

关于MFC框架程序中CWinApp::OnIdle

关于MFC框架程序中CWinApp::OnIdle