我设置timer1.enabled := false;后,当OnTimer事件中未执行完时,还是会执行下面的语句。
有没有方法可以直接停止执行。不管下面的语句有没有执行。
谢谢。

解决方案 »

  1.   

    你想在哪里出来 就 exit;
      

  2.   

    没有直接停的办法,只有在OnTimer事件中加上Timer1.Enabled的判断。如:
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      i: Integer;
    begin
      if not Timer1.Enabled then
        Exit;  for i := 0 to 999 do
      begin
        if not Timer1.Enabled then
          Exit;
      end;
    end;
      

  3.   

    没有办法,只能在里面循环的地方判断来中断。
    所以timer事件里面不能使用比较耗时的操作,特别是不能有耗时超过timer的时间间隔的操作。
      

  4.   

    timer组件是消息驱动的,即单线程的
    也就是,如果ontimer事件正在执行,就不可能执行其它代码段
    如果timer1.enabled所在的段在执行,那么ontimer事件也肯定不在执行
    除非你在线程中操作VCL控件,但VCL是非线程安全的,这样做很危险
      

  5.   

    没有直接停的办法,和线程差不多,在线程里如果想实现楼主的功能也得加上while not Terminted
      

  6.   

    那也很难想从哪停就从哪停啊,我觉得用线程可以实现,一旦运行了thread.suspend;线程里的东西不管运行到哪都停下。
      

  7.   

    想在哪退出 就直接用exit 就可以了