a:integer;a=0; repeat application.processmessages;//在死循环中,程序能相应其它事件。 sleep(1);//降低cpu占用率,当然也降低执行效率。 if a<>0 then break; ..... until(1=2);改变a为不等于0,即可退出循环。千真万确:)
这个问题有什么争议呀。如果有的话那算我无知吧,但我知道有一种方法肯定可以的 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; 以上是随手写的代码,可能有地方不对
repeat
application.processmessages;//在死循环中,程序能相应其它事件。
sleep(1);//降低cpu占用率,当然也降低执行效率。
if a<>0 then break;
.....
until(1=2);改变a为不等于0,即可退出循环。千真万确:)
如果就在主线程,在循环中加入
PROCESSMESSAGE可以实现。
用另开的线程也可以实现,
两种方法各有适用范围。
另外,我个人观点,在主线程的PROCESSMESSAGE循环,不宜加入
sleep。
还有,sleep时间精度是几十毫秒。
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;
以上是随手写的代码,可能有地方不对