如何使用CWinThread :: OnIdle?

时间:2011-12-01 23:10:34

标签: c++ multithreading mfc

如您所知,可以在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可能会有所帮助。

1 个答案:

答案 0 :(得分:2)

MFC使用其默认的OnIdle处理来启用和禁用菜单项和工具栏按钮,如CWinApp::OnIdle的文档中所示。当条件发生变化时,不必显式启用或禁用这些项目的代码,只有在没有其他任何事情发生时它才会自动发生。

Windows本身使用类似的策略来触发WM_PAINT消息 - 这些消息只有在消息队列中没有其他内容时才会生成。

当您想要执行低优先级任务时,可以使用此技术。