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

Вниз

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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
15-1182237477
Шмелъ
2007-06-19 11:17
2007.07.22
Руки опускаются.....


15-1182249681
Megabyte
2007-06-19 14:41
2007.07.22
В Firebird е нельзя во вьюхах использовать процедуры выбора?


3-1176980413
nod
2007-04-19 15:00
2007.07.22
update sql с подзапросом


2-1182572094
Vladimir888
2007-06-23 08:14
2007.07.22
Прямое приведение


15-1182411313
kert
2007-06-21 11:35
2007.07.22
Ищу