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

Вниз

Неожиданное-рядом!! (или как прервать программу?)   Найти похожие ветки 

 
zvm ©   (2007-06-26 12:32) [0]

Вот прога!
по первой кнопке оргомный цикл - программа виснет.
Задача - второй кнопкой прервать этот висяк.

Почему это все не работает?
(ПрогрессБар для контроля работы цикла.)

implementation

{$R *.dfm}
var flag:boolean;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k:integer;
l:real;
begin
flag:=false;
for i:=1 to 1000  do
for j:=1 to 1000  do
for k:= 1 to 1000  do
begin
if flag then break;
l:=sin(k);
progressbar1.Position:=k div 10;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
flag:=true;
end;

end.


 
ЮЮ ©   (2007-06-26 12:46) [1]

Тногда надо давать возможность на ту кнопку нажать.

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k:integer;
l:real;
begin
flag:=false;
for i:=1 to 1000  do
for j:=1 to 1000  do begin
 for k:= 1 to 1000  do begin
   if flag then break;
   l:=sin(k);
   progressbar1.Position:=k div 10;
 end;
 Application.ProcessMasseges;
 end;

end;


 
Сергей М. ©   (2007-06-26 12:48) [2]


> как прервать программу?

Не программу, а подпрограмму.
Разницу-то осюсяешь или тебе по барабану ?)


 
StriderMan ©   (2007-06-26 12:48) [3]

вставь в цикл

Application.ProcessMessages;


 
zvm ©   (2007-06-26 12:53) [4]

Спасибо!
Сейчас попробую!
По простоте душевной думалось,
что клик на кнопку вызывает прерывание
и винда ВСЕГДА передает это прерывание в программу.

Век живи-век учись!
Спасибо.


 
Loginov Dmitry ©   (2007-06-26 12:54) [5]

Break -> Exit


 
homm ©   (2007-06-26 12:58) [6]

> что клик на кнопку вызывает прерывание

Вызывает. Система его обрабатывает, и ставит в очередь сообщений приложения сообщение об этом событии, а ты уж сам должен позаботиься, о том, что-бы его обработать, если вдруг процесс уже выполняеться.


 
{RASkov} ©   (2007-06-26 20:07) [7]

> for i:=1 to 1000  do
>      for j:=1 to 1000  do
>        for k:= 1 to 1000  do
>          begin
>           if flag then break; !!!!!<--- здесь мы выходим из цикла k, а остальные так и работают...
>           l:=sin(k);
>           progressbar1.Position:=k div 10;
>          end;

Т.е. либо Break заменить на Exit [5] или флаг проверять в каждом цикле...


 
{RASkov} ©   (2007-06-26 20:08) [8]

> заменить на Exit

...Ну соответственно, все что после циклов в пролете)...


 
{RASkov} ©   (2007-06-26 20:10) [9]

> ...Ну соответственно, все что после циклов в пролете)...

Т.е. в конкретном случае - не страшно, так как после циклов ничего нет...:)


 
homm ©   (2007-06-26 21:44) [10]

> или флаг проверять в каждом цикле...

Можно только в верхнего уровня. Появится небольшая латентность, но зато пна производительности почти не скажется



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

Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
2-1182752139
Washington
2007-06-25 10:15
2007.07.22
"Резиновый" дизайн


2-1182935082
Chaval'
2007-06-27 13:04
2007.07.22
OpenDialog


2-1182415834
Abcdef123
2007-06-21 12:50
2007.07.22
Почему датасоурс Nil (не определяется)? (выдает ошибку)Что не так


2-1183224488
nord13579
2007-06-30 21:28
2007.07.22
Как вывести результат работы консоли в Memo?


2-1183051740
vitv
2007-06-28 21:29
2007.07.22
Чем отличаются DrawColumnCell от DrawDataCell?





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