在Dialog-based 的程序中:
   CMyWinApp::OnIdle(LONG lCount)
   {
       AfxMessageBox("OK");
       
       return CWinApp::OnIdle(lCount);
   }
   函数AfxMessageBox根本不会执行。而在SDI或MDI中,会执行N次,为啥?

解决方案 »

  1.   

    用CWinApp::OnIdle函数来执行后台工作,因为该函数是程序主消息循环在空闲时调用的。但OnIdle的执行并不可靠,例如,如果用户在程序中打开了一个菜单或模态对话框,那么OnIdle将停止调用,因为此时程序不能返回到主消息循环中!在实时任务代码中调用PeekMessage也会遇到同样的问题,除非程序能保证用户不会选择菜单或弹出模态对话框,否则程序将不能返回到PeekMessage的调用处,这将导致后台实时处理的中断。
      

  2.   

    但现在是Dialog-based的程序,应该也会同样不停的PeekMessage吧。