此问题有争议,有的说要用到消息,有的说不用那么麻烦,设一个全程变量,循环中检查这个变量,按钮按时改变这个变量的值即可终止这个循环。又有人说,这样不行,因为循环中根本无法按下按钮。我也不知道哪个对了,请各位老师指教,并给出具体的方法及代码,谢谢了!!

解决方案 »

  1.   

    a:integer;a=0;
    repeat
      application.processmessages;//在死循环中,程序能相应其它事件。
      sleep(1);//降低cpu占用率,当然也降低执行效率。
      if a<>0 then break;
      .....
    until(1=2);改变a为不等于0,即可退出循环。千真万确:)
      

  2.   

    这问题有什么争议呢?要系统能处理按钮事件,也就是在这段时间有能力处理按钮消息,
    如果就在主线程,在循环中加入
    PROCESSMESSAGE可以实现。
    用另开的线程也可以实现,
    两种方法各有适用范围。
    另外,我个人观点,在主线程的PROCESSMESSAGE循环,不宜加入
    sleep。
    还有,sleep时间精度是几十毫秒。
      

  3.   

    这个问题有什么争议呀。如果有的话那算我无知吧,但我知道有一种方法肯定可以的
    var 
      Clicked:Boolean;
    procedure TForm1.FormCreate(Sender:TObject);
    begin
      Clicked:=False;
    end;procedure TForm1.Button1Click(Sender:TObject);
    begin
      Clicked:=True;
    end;//以下是循环体
      while 1=1 do
      begin
        Application.ProcessMessages;
        //让程序能响应Window消息这样按钮可以接收鼠标单击事件
        if Clicked then
        begin
          ShowMessage('Break from a loop');
          Click:=False;
          Break; 
        end;
      end;
    以上是随手写的代码,可能有地方不对