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

Вниз

Переменные   Найти похожие ветки 

 
Piroman ©   (2003-07-19 11:36) [0]

Есть цикл, который выполняется очень долго. На форме кнопка (Прервать), в которой OnClick: IsExit:=true;
В цикле проверяю if IsExit then break;
Переменную IsExit необходимо объявить с каким-то параметром, каким?
Или есть другие способы прервать запущенный цикл?


 
Palladin ©   (2003-07-19 11:38) [1]

у переменных нет никаких параметров
Application.ProcessMessages вставь в цикл


 
Anatoly Podgoretsky ©   (2003-07-19 11:41) [2]

Написано правильно, другие пути искать не нужно.


 
Piroman ©   (2003-07-19 12:00) [3]

Если в цикле стоит Application.ProcessMessages, это не спасает от "старого" значеня переменной, которое было при запуске процедуры.


 
Palladin ©   (2003-07-19 12:04) [4]

поясни


 
Anatoly Podgoretsky ©   (2003-07-19 12:13) [5]

Так ты что не присваиваешь начальное значение при запуске, ты это зря.


 
Palladin ©   (2003-07-19 12:18) [6]

Ах, так вот что это значит :) Чет я сразу не сообразил...
Ужас какой...


 
Piroman ©   (2003-07-19 12:46) [7]

>Так ты что не присваиваешь начальное значение при запуске, ты это зря.
Нет, я не это имел в виду.
Поясняю:
В начале процедуры, в которой цикл, естественно IsExit:=false;
Потом, если даже в другой процедуре выполняется IsExit:=true;, в цикле остается false.
В CBuilder это решалось, если перед описанием переменной написать static (вроде). Т.е. изменяя значение переменной в одной процедуре оно изменялось во всех, даже запущенных до этого.


 
Palladin ©   (2003-07-19 12:54) [8]

код давай


 
Piroman ©   (2003-07-19 13:13) [9]

На этом компе Delphi нет, поэтому, приблизительно:

...
var
IsExit:boolean;
...

procedure TForm1.OnButton1Click(Sender:TObject);
begin
IsExit:=false;
repeat //Очень долгий по времени цикл
...
if IsExit then break;
Application.ProcessMessages;
...
until false; //для простоты
if IsExit then
ShowMessage("Прервано пользователем.");
...
end;

procedure TForm1.OnStopClick(Sender:TObject);//нажатие кнопки "Прервать"
begin
IsExit:=true;
end;


 
Palladin ©   (2003-07-19 13:17) [10]

ну и что?
все верно написано
где у тебя что не сохраняется? или остается?


 
Piroman ©   (2003-07-19 13:18) [11]

Ну, дык, не прерывается!


 
Palladin ©   (2003-07-19 13:20) [12]

не может такого быть...


 
jack128 ©   (2003-07-19 14:59) [13]

2 варианта
либо у тебя или в OnStopClick или в OnButton1Click обявлна локальная пременная IsExit
либо там где у тебя многоточия значение IsExit меняет...
если убратьиз кода многоточия, то все работает

Да, есть еще один вариант: нас подкалывают ;-)


 
WarLord ©   (2003-07-19 21:14) [14]


> var
> IsExit:boolean;
> ...
>
> procedure TForm1.OnButton1Click(Sender:TObject);
> begin
> IsExit:=false;
> repeat //Очень долгий по времени цикл
> ...
Application.ProcessMessages; //сначала проверяем очередь сообщений
> if IsExit then break;
> ...
> until false; //для простоты
> if IsExit then
> ShowMessage("Прервано пользователем.");
> ...
> end;
>
> procedure TForm1.OnStopClick(Sender:TObject);//нажатие кнопки
> "Прервать"
> begin
> IsExit:=true;
> end;



 
Del ©   (2003-07-20 03:07) [15]

Проще Thread сделать!


 
Piroman ©   (2003-07-21 10:13) [16]

Все! Пора Delphi сносить. У меня не работает, а у друга работает.
Спасибо, Palladin.


 
Immortal_Death   (2003-07-21 14:58) [17]

так если для каждого большого и среднего цикла липить новый поток...
нафига усложнять?



Страницы: 1 вся ветка

Текущий архив: 2003.08.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
6-10335
Alexander Pogodin
2003-05-28 17:00
2003.08.04
TWebBrowser.OnBeforeNavigate2


7-10461
Disa
2003-05-22 07:49
2003.08.04
Определение раскладки


14-10438
Alexey
2003-07-17 17:11
2003.08.04
Как написат Web Server


1-10279
mmm
2003-07-21 21:40
2003.08.04
как работать с ShellListView ?


14-10410
Andryk
2003-07-17 09:48
2003.08.04
После такого плаката и домой-то не захочется :о)))