为什么在使用MFC编程时,MFC内部自动维护了一个消息循环,为什么有些程序还要再自己定义一个消息循环?
void CMediaTimerDlg::OnStart() 
{
// TODO: Add your control notification handler code here
MSG message;
k=0;//初始化为零
count=0;//初始化为零
nMaxCount=10000;//初始化为10000
StartOneMilliSecondTimer();//触发定时器
volatile int nTemp;//设置临时变量
for (m_nCount=0;m_nCount<nMaxCount;m_nCount++)
{
for (nTemp=0;nTemp<5000;nTemp++)
{ /*运行CPU*/}
if (::PeekMessage(&message,NULL,0,0,PM_NOREMOVE))//中断时间交出控制权
{
::TranslateMessage(&message);
::DispatchMessage(&message);
count=m_nCount*5000;//计算出当前循环次数
}
}
timeKillEvent(TimerID_1ms);//测试结束得删除定时器
timeEndPeriod(wAccuracy);//测试结束得删除分辨率
AfxMessageBox("测试结束");

}

解决方案 »

  1.   

    消息循环是重载的,也是重写基类的同名方法,以达到扩展。
    消息才是自定义的。一般这个自定义的消息就是重载的目的。
    举个简单的例子来说明它的用途
    比如要很长段时间做某件事情,我们一般会用线程以免卡死程序,
    然而偶尔又要操作界面,我们就可以自定义一个消息,重载消息循环来接收。
    于是在线程里POST这个消息。
      

  2.   

     arong1234 ()你说得挺有道理,但我发现照样界面变白屏,得不到刷新
    void CMediaTimerDlg::OnStart() 

    // TODO: Add your control notification handler code here 
    MSG message; 
     
    count=0;//初始化为零 
    nMaxCount=1000000;//初始化为10000 
    volatile int nTemp;//设置临时变量 
    for (m_nCount=0;m_nCount <nMaxCount;m_nCount++) 
       { 
          for (nTemp=0;nTemp <500000;nTemp++) 
           {         /*运行CPU*/       } 
          if (::PeekMessage(&message,NULL,0,0,PM_NOREMOVE))//中断时间交出控制权 
           { 
             ::TranslateMessage(&message); 
             ::DispatchMessage(&message); count=m_nCount*5000;//计算出当前循环次数 
           } 
        } 
    AfxMessageBox("测试结束"); }
    上面这程序照样“假死机”啊????????????
    好象也避免不了,好象要用多线程才能防止“假死机”啊???哪位高手再帮帮忙啊??????????????????????????
      

  3.   

    为什么在使用MFC编程时,MFC内部自动维护了一个消息循环,为什么有些程序还要再自己定义一个消息循环? 
    这一点还是没明白