![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() Не возникнут, если все правильно сделать...имхо...
В начале был Бит, потом Байт и только потом появилось Слово... |