![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как ее остановить??? [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]ты код цикла-то приведи ..