Форум: "Основная";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
Внизвыход из цикла Найти похожие ветки
← →
KonstVD (2003-02-11 17:00) [0]В программе есть цикл, есть кнопка, которая должна прерывать этот цикл. Подскажите, плз, как сделать, чтобы прога на эту кнопку правильно и без проблем реагировала?
← →
Igit (2003-02-11 17:15) [1]Цикл нужно создать в отдельном потоке
← →
Igit (2003-02-11 17:16) [2]Удалено модератором
Примечание: Личная переписка
← →
bak (2003-02-11 17:22) [3]еще по таймеру можно организовать
← →
Vit@ly (2003-02-11 18:09) [4]Application.ProcessMessages;
← →
Борис_ (2003-02-11 18:21) [5]самое просто но не очень быстродейтсвенное решение - подключить таймер...
а при нажатии на кнопу делать timer1.enabled:=false;
хотя быстрее через поток...но так легче...
← →
Андрей Сенченко (2003-02-11 21:26) [6]Борис_ © (11.02.03 18:21)
Собственно ... это СОВСЕМ не решение. Ну и что, что Вы отключили таймер ?
1. Дальше нужно писать еще кусок кода проверки состояния этого таймера.
2. Собственно сам таймер отнимет системные ресурсы.
3. А у Вас есть уверенность, что сообщение приложению о нажатой кнопке вообще буднт обработано приложением раньше конца цикла ?
Igit © (11.02.03 17:15)
А можно набрать Дятьковского хрусталя совминовской серии и забивать им гвозди, Вы уж извините.
KonstVD (11.02.03 17:00)
Ваш вопрос видимо заключается в том, что при обработке большого количества данных в цикле программа реагирует на нажатие кнопки "не сразу" - создается "эффект подвисания". В этом случае Вам необходимо заставить ее обрабатывать очередь сообщений в каждом шаге цикла. Решение этой проблемы Вам предложил Vit@ly © - нужно поставить в цикле обработчик
Application.ProcessMessages;
,а уже на саму кнопку повесить код, который завершит ваш цикл, например :
1. Установка логического флага, по которому в цикле будет осуществляться жесткий Break
2. Прямое назначение условия конца цикла.
← →
Андрей Сенченко (2003-02-11 21:30) [7]KonstVD (11.02.03 17:00)
Убедительная просьба кстати ... если я вдруг не угадал суть Вашего вопроса - сформулируйте его пожалуйста КОРРЕКТНО
← →
xn0bys (2003-02-12 08:53) [8]
...
for i:=0 to 199999 do
begin
// здесь делай чё надо
...
Application.ProcessMessages;
If Button1.Down Then Break;
end;
...
Писал на память, может поможет...
← →
i-C3H7OH (2003-02-12 10:37) [9]со threadом работать оччень просто
TMyThread = class(TThread)
procedure Execute;
end;
procedure TMyThread.Execute;
var i:integer;
begin
for i:=0 to 199999 do
begin
// здесь делай чё надо
...
If Terminated Then Break;
end;
end;
MyThread := MyThread.Create(true);
MyThread.FreeOnTerminate := True;
MyThread.Suspended := false;
OnClick:
MyThread.Terminate;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c