Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизBreak для всех циклов Найти похожие ветки
← →
McSimm2 (2003-07-18 13:25) [0]нет никакой функции, что бы можно прервать выполнение всех циклов в процедуре?. У меня цикл крутится в цикле. Я флаг выставляю, но помоему эт как то не круто....
← →
Виктор Щербаков (2003-07-18 13:28) [1]Может механизм обработки исключительных ситуаций подойдет?
← →
McSimm2 (2003-07-18 13:32) [2]Как его реализовать ?
← →
ZrenBy (2003-07-18 13:34) [3]goto
← →
Юрий Зотов (2003-07-18 13:34) [4]На выбор:
1. Виктор Щербаков © (18.07.03 13:28).
2. Внешний цикл в виде while или repeat.
3. Break во внешнем цикле.
4. Пресловутый GoTo.
5. Exit, если надо выйти из процедуры.
← →
Serginio (2003-07-18 13:34) [5]Goto
← →
McSimm2 (2003-07-18 13:35) [6]5 - то что надо
← →
VAleksey (2003-07-18 13:39) [7]+ к 5 можно еще Abort по ситуации.
← →
Виктор Щербаков (2003-07-18 13:45) [8]VAleksey © (18.07.03 13:39)
Дык это тоже относится к Виктор Щербаков © (18.07.03 13:28) :-)
← →
Spawn (2003-07-18 13:45) [9]Или Exit
← →
KDS (2003-07-18 15:47) [10]Abort если процедуры вложены одна в другую и Exit если все цыклы в одной процедуре
← →
Семен Сорокин (2003-07-18 19:23) [11]McSimm2 (18.07.03 13:25)
а два раза Break не подойдет?
← →
Marser (2003-07-18 21:49) [12]Два раза Break
← →
Serginio (2003-07-18 21:51) [13]Halt, TerminateProcess.
← →
Marser (2003-07-18 21:58) [14]
> Serginio (18.07.03 21:51)
> Halt, TerminateProcess.
Добрый ты :-) Так все циклы в программе прервутся и не только они...
← →
Набережных С. (2003-07-19 06:47) [15]Кнопка reset
← →
Anatoly Podgoretsky (2003-07-19 08:48) [16]Пересмотреть алгоритм/дизайн
← →
Borealis (2003-07-20 15:31) [17]
> Serginio (18.07.03 21:51)
> Halt, TerminateProcess
Кстати, почему замечательная процедура Halt, вдруг отказывается работать в "событиях" FormActivate и FormShow?
← →
Ihor Osov'yak (2003-07-20 15:49) [18]2 Borealis (20.07.03 15:31)
Формальный ответ:
Нажать F1 для Halt, и прочитать, что "To perform a normal termination of a Delphi VCL non-console application, call Application.Terminate."
Ответ по существу.
Halt инициализирует процесс немедленного уничтожения обьектов приложения, в тч и формы, с которой он вызвался. То есть, обьект разрушаем, а фактически продолжаем выподнять его методы. Гарантированные ексепшены с рантайм эрорами.. Целый воз.. Если интересуют подробности - плиз "use debug dcu" + усиленное юзание F7 и F8 (трассировка)..
← →
Marser (2003-07-20 21:57) [19]Действительно, чем Exit не подходит?
← →
iZEN (2003-07-20 22:46) [20]
try
while...
for...
raise BreakOnException.Create("Выход из цикла");
...
except
on e: BreakOnException do begin
ShowMessage("Спокойненько вышли из цикла!");
end;
end;
← →
old_monkey (2003-07-21 17:21) [21]Вообще-то это один из двух вариантов,
где красивее всего будет с goto.
Конечно можно:
...
if (что-то там) then begin ie := 1; break end;
...
ie := 0;
end // конец внутреннего цикла
if (ie = 1) then break end;
...
end // конец внешнего цикла
Второй случай - когда в счетном цикле что-то ищем, и если не нашли присваиваем переменной 0, а не конечное значение.
И здесь можно:
for i := 1 to 1000 do
begin
...
if (что-то там) then break end;
...
end
if i = 1000 then i := 0 end;
Но видели бы вы, во что это транслируется!
Когда-то, когда компьтеры были большими (не помню, что за язык был, то ли PL-1, то ли какая-то версия Fortran, да и вряд ли эти названия вам что говорят), break мог быть с меткой, причем метилась строка начала цикла(!).
← →
old_monkey (2003-07-21 17:28) [22]Да, еще забыл.
Иногда (когда внешний цикл while), красивее каждый цикл заворачивать в отдельную функцию.
while internal_cycle() = 0 do и т.д.
Прием, распространенный в С.
← →
Sandman25 (2003-07-21 17:30) [23]old_monkey (21.07.03 17:21)
>break мог быть с меткой, причем метилась строка начала цикла(!).
В Java сейчас так же. А в Паскале приходится использовать Goto.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c