如何适时停止死循环?(100分)

  • 主题发起人 主题发起人 JeffChen
  • 开始时间 开始时间
J

JeffChen

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个程序中必须使用死循环,但是我在适当的时候必须中断
这个死循环。怎么搞定?
 
在一个Button中写如下代码: Button1.Tag:=1
在循环中这样写
while Button1.Tag=0 do
begin
... //你的代码
Application.ProcessMessage;
end;
 
不知道你说的中断是什么意思,如果是要在达到某以条件时跳出循环,
可使用 Break 终止循环:

while true do
begin
......//你的代码

if <Condition = True> then
Break;

.....//你的代码
end;
 
不知道你说的中断是什么意思,如果是要在达到某个条件时跳出循环,
可使用 Break 终止循环:

while True do
begin
......//你的代码

if <Condition = True> then
Break;

.....//你的代码
end;
 
看一下以下代码:

var
quitflag: Boolean;

procedure TForm1.Button1Click(Sender: TObject);
const
runon: Boolean=false;
begin
quitflag:=false;
if runon then Exit
// 若已进入本过程则退出
runon := true

while true do begin
.....//你的代码
Application.ProcessMessages
// 让其他控件能获取消息
if quitFlag then Break

end;
runon:= false
// 清除已进入本过程标志
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
quitFlag := true;
end;
 
到底是什么样的死循环?
Windows程序中有无数死循环,它本身的消息检索就是死循环.
 
JeffChen:
=========
推荐使用rex的方法,因为他设立了一个全局变量quitflag,同时
使用Application.ProcessMessages让其它的过程可以处理windows
事件,这样,你可以在TForm1.Button1Click()事件处理之外以及
其它的组件事件中控制到这个循环的退出。
rex还特别考虑到Button1Click()这个事件处理“重入”的问题,
设置了runon这个标志,应该是十分全面的了。
不过,作为一个另外的思路,不如将runon这个标志改成
button1.Enabled := false来得好。
 
不凑热闹了!
 
最好用multi-thread
 
这么简单的问题,sigh.
不好意思,纯属灌水。
 

Similar threads

回复
0
查看
815
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
845
SUNSTONE的Delphi笔记
S
后退
顶部