Главная страница
    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.48 MB
Время: 0.008 c
14-10366
konstantinov
2003-07-16 19:16
2003.08.04
PDF файлы


3-10131
Apolon
2003-07-15 11:29
2003.08.04
Проверка обязательных полей базы данных отображенных на форме


14-10361
Кен
2003-07-13 05:45
2003.08.04
Как начинающему въезжать в базы данных ?


9-10075
0$a
2003-02-04 01:09
2003.08.04
Игровые ресурсы


1-10294
3APA3A
2003-07-20 01:04
2003.08.04
Cursor





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский