Цитата:
Если работа идет внутри цикла, то Suspend не поможет.
|
Как это не поможет потоки для того и нужны чтобы цикл приостановливать...есть вполне рабочее приложение, в методе цикла execute выполняется процедура в которой длииинный цикл, ставь на паузу и продолжай сколько душе угодно...
Пример рабочего кода...
Код:
//Выполнение потока
procedure TMyThreaD.Execute;
begin
Form1.Proc;//Выполнение процедуры в потоке
end;
//Кнопка старт/стоп
procedure TForm1.Button1Click(Sender: TObject);
begin
If Button1.Caption = 'Стоп' then
begin
TerminateThread(MyThreaD.Handle, 0);//Удаляем поток
Button1.Caption := 'Старт';
Button2.Enabled := false;
Button2.Caption := 'Пауза';
Exit;
end;
MyThreaD := TMyThreaD.create(true);//Запускаем новый поток
MyThreaD.FreeOnTerminate := true;
MyThreaD.Priority := tpLower;
MyThreaD.Resume;
Button1.Caption := 'Стоп';
Button2.Enabled := true;
Button2.Caption := 'Пауза';
end;
//Кнопка пауза/продолжить
procedure TForm1.Button2Click(Sender: TObject);
begin
if MyThreaD.Suspended then
begin
Button2.Caption := 'Пауза';
MyThreaD.Resume;
end
else
begin
Button2.Caption := 'Продолжить';
MyThreaD.Suspend;
end;
end;
//Процедура выполняемая в потоке
Procedure TForm1.Proc;
var
i : Longword;
begin
for i := 0 to 100000 do//Долгий цикл
begin
...
end;
end;