Показать сообщение отдельно
  #9  
Старый 20.01.2010, 10:01
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Цитата:
Если работа идет внутри цикла, то 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;
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием