Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-10274
Rafa
2003-07-21 14:35
2003.08.04
Ассемблерные вставки в Delphi


6-10340
Diatel
2003-05-30 07:43
2003.08.04
Интересный вопрос про ICMP


14-10392
cjiohobaji
2003-07-17 08:33
2003.08.04
QuickReport


14-10359
DenKop
2003-07-17 14:18
2003.08.04
Где взять простой ftp сервер для win.


1-10223
Феликс
2003-07-21 00:23
2003.08.04
Как открыть окно состоящее только из заголовка.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский