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;
Каверзный вопрос о приостоновке цикла.
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.
Цитата:
Originally posted by nice
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.
Можно сделать в отдельном потоке цикл.
Завести Event и по нему сверяться, когда продолжать, а когда нет. Но, в любом месте цикл остановить не получится. Можно например остановить только в том месте, где стоит проверка сброса/установки Event, например, в начале итерации.
Цитата:
Originally posted by nice
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.
Скажите вот если есть какой то цикл большой который выполняется длительное время можно ли допустим на форме во время выполнения цикла поставить галочку и цикл приостановится. а потом убрать и цикл продолжит свою работу. что бы поставить галку во время работы цикла я знаю надо преминить application.ProcessMessages; в теле цикла а вот как сделать так что бы цикл замер не выходя из него что бы там не запоминать переменную а потом не запускать его с начала этой переменной а просто замер.
А ещё можно обойтись без всяких Event'ов:
Примерное определение потока:
Код:
Останавливаем цикл:
Код:
MyThread.Suspend;
Продолжаем итерации:
Код:
MyThread.Resume;
Таким образом мы будем знать на какой итерации находимся - Cycle ;)