Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Каверзный вопрос о приостоновке цикла.

438
12 августа 2005 года
nice
103 / / 13.10.2003
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.
302
12 августа 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by nice
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.


Можно сделать в отдельном потоке цикл.
Завести Event и по нему сверяться, когда продолжать, а когда нет. Но, в любом месте цикл остановить не получится. Можно например остановить только в том месте, где стоит проверка сброса/установки Event, например, в начале итерации.

5
12 августа 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by nice
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.



А ещё можно обойтись без всяких Event'ов:

Примерное определение потока:

Код:
type
  TMyThread = class(TThread)
    private
      fCycle: integer;
    protected
      procedure Execute; override;
    public
      property Cycle: integer read fCycle;
  end;

  procedure TMyThread.Execute;
    begin
      fCycle:=1;
      while fCycle < CYCLE_COUNT do begin
        DoSomething;
        inc(fCycle);
      end;
    end;


Останавливаем цикл:
 
Код:
MyThread.Suspend;


Продолжаем итерации:
 
Код:
MyThread.Resume;


Таким образом мы будем знать на какой итерации находимся - Cycle ;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог