如何在循环中进行一些进程暂停(delphi)

时间:2010-06-25 19:45:00

标签: delphi

如何在使用循环时暂停和恢复应用程序

我可以在我的循环的开始时暂停一些睡眠(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

问候

3 个答案:

答案 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)

检查是否按下某个键?