发现SetTimer只要用一次,即使kill了,还是要执行一次,有什么办法可以让它不执行,或是把时间重置?
我是放在循环里面,希望以循环结束最后一次设置的SetTimer为准,在开始killTimer在结束SetTimer发现不行,很多SetTimer累积起来了,都要去执行一次。

解决方案 »

  1.   

    SetTimer即使同名也不行,不会把以前的冲掉,都会累积起来。同名SetTimer回调函数为0或nil也不能重置时间。
      

  2.   

    其实我只是想循环结束以后等几秒关闭窗体,有别的办法设置等几秒也行,sleep肯定不行,整个程序都sleep了,似乎也没有wait?
      

  3.   

    SetTimer为什么放在循环中???!!!
    这就是出错的根本原因知道吗?不要放在循环中
      

  4.   

    那该怎么实现我的目的呢?其实只要kill以后timer不去执行就没问题了。但它至少要去执行一次。
      

  5.   

    严格来说不是循环,说循环好理解,其实是不断接收消息,想以最后一次为准设置timer,你不知道到底会有多少次消息,只能每次都设置。每次开始都kill,结束都set像前面说的不行。真是循环的话跟在循环后面设置timer就可以了。
      

  6.   

    关键是这个timer,同样的句柄,同样的id,再次设置应该冲销前面的才对,而且kill了应该不执行才对。结果恰恰相反。
      

  7.   

    有个笨办法,使用TTimer组件,在SetTimer处设置Enabled:= True; kill处设置Enabled:= False;这样可以得到从最后一次执行使能处的延时
      

  8.   

    其实早解决了,呵呵,似乎delphi的Timer才能设置Enabled,还是感谢hxy3100回复,分给你了。
      

  9.   

    delphi的timer要放在它自己的窗体里面,而只要一用Forms,程序就大几十倍,让人无法忍受。