Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как ее остановить??? [D7, WinXP]


Voland777 ©   (2004-08-11 15:13:00) 

С кнопки в форме запускается процедура которая в цикле операторами ReadLN читает строки текстового файла. Процесс довольно длительный и хотелось бы по Esc его останавливать при необходимости. Но анализ в процедуре вложенной в цикл : IF Key = 27 -> выход из цикла - игнорируется! Почему?


Мастер   (2004-08-11 17:43:00) [1]

>Sandman25 ©   (11.08.04 17:41) [19]
У меня тоже похожая задача возникала-)

Например чтение протоколов работы программ, обработка(преобразование) и добавление в БД.


Sandman25   (2004-08-11 17:41:00) [2]

[18] Мастер ©   (11.08.04 17:36)

1. В таком случае нужно СУБД использовать, а не из файла по строке читать.
2. Согласен. Но ведь не написали, как именно. Вдруг поток только замедлит работу.


Мастер   (2004-08-11 17:36:00) [3]

>Sandman25 ©   (11.08.04 17:30) [16]
> 1. И что в этом плохого? Пускай пользователь дергает мышь,
> если ему охота.


Неприемлимо в случае критичных к скорости вычислений.

2. А как иначе? Хотим добавить новую возможность, но без цены за это? Золотое правило программирования :)

Если можно сделать с наименьшими потерями в производительности, то почему не сделать правильно?


ALS   (2004-08-11 17:31:00) [4]

Можно вставить в цикл:

  ...
  Application.ProcessMessages;
  if (GetKeyState(VK_Escape) and 128) = 128 then Break;
  ...


Sandman25   (2004-08-11 17:30:00) [5]

1. И что в этом плохого? Пускай пользователь дергает мышь, если ему охота.
2. А как иначе? Хотим добавить новую возможность, но без цены за это? Золотое правило программирования :)


MacroDenS   (2004-08-11 17:21:00) [6]

1. если цикл мощный, то для такого метода нужно ProcessMessages еще ставить, что бы события до формы достучаться могли...
2. будет заторможенность цикла...


Sandman25   (2004-08-11 17:17:00) [7]

Объясните мне, тупому, чем плох вариант [5].


MacroDenS   (2004-08-11 17:14:00) [8]

А когда пива много???


KSergey   (2004-08-11 17:11:00) [9]

Нет его, увы...


MacroDenS   (2004-08-11 17:08:00) [10]

ага, так может все же стоит уже прийти к общему, обоюдному мнению???


KSergey   (2004-08-11 17:06:00) [11]

Не, не буду спорить
Надоело
Уже не раз спорили, каждый при своем остался ;)


MacroDenS   (2004-08-11 17:05:00) [12]

поспорить-то конечно можно...
но по сравнению с [5], потоки все же лучше.


KSergey   (2004-08-11 17:02:00) [13]

> [7] MacroDenS ©   (11.08.04 17:01)
> лечше все же потоки...

Готов спорить.
Хотя не в этом пока суть, по-моему.


MacroDenS   (2004-08-11 17:01:00) [14]

лечше все же потоки...


KSergey   (2004-08-11 16:57:00) [15]

> [5] 46_55_41_44 ©   (11.08.04 16:53)
> и все... Наслаждайся!! :)))

Не обманывайте человека.


46_55_41_44   (2004-08-11 16:53:00) [16]

Объяви глобальную переменную скажем StopCycle : Boolean;
в FormCreate дай ей значение StopCycle := False; (не обязательно)

Потом...
В свойствах формы KeyPreview установи на True;
Затем в Form1.OnKeyDown напиши
if Key = 27 then
 StopCycle := True;
========================
Потом впиши в цикл
for
begin
 if StopCycle then
 begin
   StopCycle := False;
   Break;
 end;
end
(может repeat until или while без разницы!)

и все... Наслаждайся!! :)))


Mihey_temporary   (2004-08-11 15:32:00) [17]

Используй потоки


Боян Георгиев   (2004-08-11 15:19:00) [18]

for i := 1 to n do
 begin
 ...
 ProcessMessages;
 end;


KSergey   (2004-08-11 15:17:00) [19]

Application.ProcessMessages


Digitman   (2004-08-11 15:15:00) [20]

ты код цикла-то приведи ..


Наверх

Титульная страница Поиск, карта сайта Написать письмо