![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Как приостановить цикл во время работы?
Т.е. например Код:
for i:=1 to 10 do begin ыыы end; |
|
#2
|
|||
|
|||
|
выйти из цикла Break;
типа если хож прервать цикл пишешь break; и фсе |
|
#3
|
||||
|
||||
|
А продолжение цикла? или оно автоматом идет?
Т.е. цикл должен возобновляться с той же позиции, где он был остановлен, но только после действий юзера. |
|
#4
|
||||
|
||||
|
в бейсике есть функция stop
может она подойдет Если подойдет я буду в шоке + run чтоб продолжить |
|
#5
|
|||
|
|||
|
это консольное приложение или простое??? если консоль то пишешь readln(переменная:стринг) и обрабатываешь
по другому ставишь присвойки из эдитов и т д |
|
#6
|
||||
|
||||
|
b2soft, спасибо, попробую
Проблема в том, что прога должна дождаться выбора в радиогруппе и нажатия клавиши, но думаю разница не очень большая, буду пробовать. Хотя тема возможно не закрыта... CTAJLUH, бред пишешь... |
|
#7
|
||||
|
||||
|
чтобы запустить/приостановить цикл нужно использовать потоки (Thread) и их методы resume/suspend...т.е. нажимаешь кнопку пауза цикл приостанавливается, если продолжить, то цикл продолжается...
|
|
#8
|
|||
|
|||
|
Если работа идет внутри цикла, то Suspend не поможет.
Я делал так: Код:
var Stop: boolean; //где то, но глобальная Далее в потоке: Код:
...
for i := 1 to N do begin
...
if Stop = true then
repaet
application.processmessages;
until Stop = false;
...
end;
... |
|
#9
|
||||
|
||||
|
Цитата:
Пример рабочего кода... Код:
//Выполнение потока 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; |
|
#10
|
|||
|
|||
|
Проблемы возникнут, когда процедура будет вызываться через Synchronize
|
|
#11
|
||||
|
||||
|
Не возникнут, если все правильно сделать...имхо...
|