Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.20;
Скачать: CL | DM;

Вниз

выход из цикла   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
3-63507
mate
2003-02-02 16:47
2003.02.20
Создание отчётов QReport


3-63562
gonta
2003-02-03 23:51
2003.02.20
Работа с датами в БД


3-63591
_pavel_
2003-02-04 13:05
2003.02.20
Fast Report


7-63865
helloman
2002-12-20 23:40
2003.02.20
Это интересно


3-63499
yuli
2003-02-04 14:40
2003.02.20
Как передать в процедуру ИЗОБРАЖЕНИЕ?