如何在使用循环时暂停和恢复应用程序
我可以在我的循环的开始时暂停一些睡眠(xxx),但我希望在我需要的时候暂停并在我需要时恢复
任何想法?
提前致谢
好的,这是更多的解释
for i:=0 to 100 do
begin
if button1.clicked then pause //stop the operation and wait for resume button
if button2.clicked then resume //resume the operations
end;
edit2:
好的家伙我会告诉一个例子很好地采取任何检查器假设代理检查器,我有一堆代理加载在我的tlistviwe我正在检查所有,通过使用lop for i:=0 to listview.items.count do
...... < / p>
我希望在需要时暂停我的检查操作,并在需要时恢复
我是清楚还是我必须解释一些? :S问候
答案 0 :(得分:7)
你需要一个布尔标志来指示继续循环是否安全。如果某些事情发生,那么你需要暂停,它应该将变量设置为false。这意味着,除非您使用多个线程,否则无论如何设置此标志都必须在循环内部进行检查。然后在循环的顶部(或底部),检查此变量是否为真,否则暂停。
在您的解释中,这是基本想法:
procedure TForm1.DoLoop;
begin
FCanContinue := true;
for i:=0 to 100 do
begin
//do whatever
Application.ProcessMessages; //allow the UI to respond to button clicks
if not FCanContinue then Pause;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FCanContinue := false;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
FCanContinue := true;
Resume;
end;
这是一个非常简单的实现。如果你有一个需要能够在命令上暂停和恢复的长时间运行的任务,那么你真正应该做的就是将它放在一个单独的线程中,并查看TEvent
中的SyncObjs
类
答案 1 :(得分:1)
好的,我不明白你要做什么,但这里有一些伪代码:
for i:=0 to 100 do
begin
if button1.clicked then
begin
while not button2.clicked do
sleep(50);
end;
end;
答案 2 :(得分:0)
检查是否按下某个键?