在 OnTimer里面设置的定时器,间隔为100Ms,在里面大概是这样的
  if(m_index)
{
 .............
 .............
 .............
 m_index=false;
 AfxMessageBox(m_index);
 KillTimer(1);  
 
 return ;
}然后第一次输出的会是 1,以后会输出几次0.
我给改成下面这样
  if(m_index)
{
 KillTimer(1);
 .............
 .............
 .............
 m_index=false;
 AfxMessageBox(m_index);  
 return ;
}就只会输出一次 1.为什么会出现上面这种情况啊,我用spy++查看这个窗口的消息,显示的是执行完一次就没有这个定时器消息了啊,后面的那几条是怎么回事?我在m_index=false;下断点,单步执行的时候就只会弹出一次 1,按理说应该是每隔100Ms,系统就会把一个定时器消息放到消息队列,然后等待上条消息执行结束才会执行这个定时器消息,高手解释下。还有个问题就是如果在执行完KillTimer(1),以后,放到消息队列中的与之对应的定时器消息会不会一同取消呢?

解决方案 »

  1.   

    然后第一次输出的会是 1,以后会输出几次0.
    我给改成下面这样
      if(m_index)
    {
    KillTimer(1);
    .............
    .............
    .............
    m_index=false;
    AfxMessageBox(m_index);
    SetTimer(1,100, NULL);
    return ;
    }就只会输出一次 1. 
    你应该这样
      

  2.   

    执行AfxMessageBox(m_index); 的时候,只有点击确定之后,才会执行KillTimer(1); 
    此时定时器还是在运行状态,就会收到下一个定时器超时事件。
      

  3.   

    不是这样的,不加AfxMessageBox(m_index); 也会执行多次OnTimer里面的内容。
    加了AfxMessageBox(m_index); 以后,第一次回弹出  1 ,以后会弹出很多次 0 ,我有个
    if(m_index)的判断啊,怎么会弹出 0 呢?