VC使用SetTimer(1,1000,NULL)函数打开的定时器,当定时时间到时,如果定时器的时间函数没有执行完的话,定时器是重新执行时间函数呢,还是等上次的执行完再执行下一次呢?
  另外,当KillTimer(1)时,定时器停止定时,如果这时正在执行时间函数,那此时是立即退出时间函数呢还是等这次执行完毕呢?
  请高手指点迷津!

解决方案 »

  1.   

    我个人认为:
    1、如楼上所说的,等上次的执得完再执行下一次。
    2、定时器和时间函数的关系是“当达到定时器所规定的时间间隔,就触发WM_TIMER消息,执行时间函数”,而时间函数并不完依赖于定时器;事实上,时间函数只有在达到定时器所规定的时间间隔后,才会“开始执行”,这只能算是时间函数“开始执行”的必要条件,并不是时间函数“执行”的必要条件;当KillTimer()时,时间函数已经开始执行函数体,但未执行完,此时定时器被关闭一般都是在触发了某种消息时执行的,为什么不可以先转向相应的消息处理子程序去执行KillTimer(可能是中断吧)后再回来继续执行时间函数(因为在此之前时间函数早已“开始执行”了)
      

  2.   

    carbon107:
       也就是说一旦进入时间函数,就必须执行完。是吧?
      

  3.   

    可以在OnTimer()中调用KillTimer(...)杀掉定时器这个