void CDemo1View::OnTttt() 
{
  // TODO: Add your command handler code here
  // TimeOut是CDemo1View的一个成员变量
  TimeOut = FALSE;
  SetTimer(1, 1000, NULL);
  for(;;)  
  {
     if(TimeOut == TRUE)
        break;
   }  MessageBox("This time out!");
}
void CDemo1View::OnTimer(UINT nIDEvent) 
{  // TODO: Add your message handler code here and/or call default
     TimeOut = TRUE;
     KillTimer(1);
     CScrollView::OnTimer(nIDEvent);
}执行OnTttt,程序就死在那,定时器不能响应?不知为何?

解决方案 »

  1.   

    你写的是个死循环,当然会死在那里了;
    也许把你的死循环换成一下代码就可以了:
    MSG msg;
    while(::GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
      

  2.   

    你的是死循环,可以在另外的一个线程中改变TIMEOUT的值
    最好是
    void CDemo1View::OnTttt() 
    {
      // TODO: Add your command handler code here
      // TimeOut是CDemo1View的一个成员变量
       SetTimer(1, 1000, NULL);
     
     }
    void CDemo1View::OnTimer(UINT nIDEvent) 
    {  // TODO: Add your message handler code here and/or call default
          KillTimer(1);
      MessageBox("This time out!");
        CScrollView::OnTimer(nIDEvent);
    }
      

  3.   

    同上,
    其实你要完成的功能就是在等设置的时间到了后,执行其他功能,比如说你的程序就是要做for循环里面的事,你完全可以放到OnTimer()里面去做
      

  4.   

    应该是执行完SetTimer(1, 1000, NULL);以后,OnTimer(UINT nIDEvent) 还没有来的及执行,也就是说TimeOut = TRUE;还没有执行,就执行了
      for(;;)  
      {
         if(TimeOut == TRUE)
            break;
       }
    然后就死循环了。
      

  5.   

    for(;;)  
      {
         if(TimeOut == TRUE)
            break;
       }
    在这里死循环了,你的程序是单线程的,所以TimeOut永远是FALSE,不可能成为TRUE
      

  6.   

    for(;;)  这是死循环,其实你完全可以在OnTimer()里实现你要的功能啊,就如上面写的:
    void CDemo1View::OnTimer(UINT nIDEvent) 
    {  // TODO: Add your message handler code here and/or call default
          KillTimer(1);
      MessageBox("This time out!");
        CScrollView::OnTimer(nIDEvent);
    }