Форум: "Начинающим";
Текущий архив: 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