如您所知,可以在MFC UI线程中指定OnIdle。有关详细信息,请参阅此参考http://msdn.microsoft.com/en-us/library/1sa2f19f.aspx。但我不确定它是如何在实践中使用的。
根据上述参考资料,
当线程的消息队列为空时,在默认消息循环中调用OnIdle。使用覆盖来调用您自己的后台空闲处理程序任务。“
所以我可以理解,当UI线程不忙时,会调用该方法。根据上面的文档,
“因为在OnIdle返回之前应用程序无法处理消息,所以不要在此函数中执行冗长的任务。”
但是在空闲事件中可以完成哪些任务?一个例子就足够了。感谢
更新:令人沮丧的事实是this old (1996) article by Russell Weisz, titled "First Aid for the Thread-Impaired: Using Multiple Threads with MFC."对了解CWinThread非常有帮助。
更新2:由于Microsoft删除了MSJ文章,this one可能会有所帮助。
答案 0 :(得分:2)
MFC使用其默认的OnIdle处理来启用和禁用菜单项和工具栏按钮,如CWinApp::OnIdle
的文档中所示。当条件发生变化时,不必显式启用或禁用这些项目的代码,只有在没有其他任何事情发生时它才会自动发生。
Windows本身使用类似的策略来触发WM_PAINT消息 - 这些消息只有在消息队列中没有其他内容时才会生成。
当您想要执行低优先级任务时,可以使用此技术。