![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите начинающему!!! [D6, Win95/98]
Ionv © (2002-09-04 08:10:00)Как выйти из цикла нажатием кнопки. Пока цикл не закончится ее нажать нельзя. Говорят для этих целей применяется Application.ProcessMessage, но как он работает..? Если не затруднит покажите пример.
СПАСИБО ВСЕМ КТО ОТКЛИКНУЛСЯ!
KSergey (2002-09-05 08:04:00) [1]
> Ionv © (05.09.02 07:02)
В интернете, например. Где именно - спросите у яндекса. Ну или книжку почитайте. Любую. "Война и мир" тоже отчасти поможет - отвлекетесь хоть.
> Anatoly Podgoretsky © (04.09.02 12:15)
> на выше указанной задаче замедления просто не будет видно.
Будьте добры, растолкуйте эту фразу поподробнее для меня, если не трудно. А в каких случаях такой подход существенно "затормозит"? (в каких он просто не даст постоянной немедленной реакции - это понятно)
MBo (2002-09-05 07:13:00) [2]>Ionv
1. Статья Кариха на этом сайте
2. Хелп и книги
3. http://mbo88.narod.ru/ToC.html
Ionv (2002-09-05 07:02:00) [3]Интересно, а как организовать два потока. И что такое thread. Где об этом можно узнать по подробнее.
Darker (2002-09-05 06:24:00) [4]2 PVOzerski ©
А если смотреть на нажатие кнопки?
Типа if button.checked, а???
PVOzerski (2002-09-04 14:51:00) [5]2 Darker ©:
>until ((i<1000000) or (not keypressed));
Вот в этом-то самом keypressed и загвоздка. Нет ведь модуля crt в Delphi...
Darker (2002-09-04 14:07:00) [6]Так... на всякий случай.
repeat
....
....
inc(i);
...
...
until ((i<1000000) or (not keypressed));
PVOzerski (2002-09-04 13:02:00) [7]2 Micah"GF ©:
Win32S не обеспечивает синхронное выполнение нескольких потоков внутри одного процесса.
Anatoly Podgoretsky (2002-09-04 12:15:00) [8]реально это замедление практически не заметно, 1 миллион обращений на моей машине происходит за 3 секунды, замедление может быть не на вызове, а на обработке сообщений, но для того и есть эта функция, что бы их обрабатывать, на выше указанной задаче замедления просто не будет видно.
Ionv (2002-09-04 12:10:00) [9]СПАСИБО ЗА ПОМОЩЬ!!!
Micah'GF (2002-09-04 12:01:00) [10]>т будет работать и в win32s (если Delphi 2), а 2-й - только в 9x/ME и NT/ 2K/XP.
А вот у меня вопросик... я понимаю что такое 9x/ME/NT/2K/XP, а вот win32s чем от них отличается, ведь ИМХО они все поддерживают 32bit режим
PVOzerski (2002-09-04 11:24:00) [11]Вариант с processmessages заведомо медленнее, чем с двумя thread"ами. Я имею в виду скорость работы цикла. Но 1-й вариант будет работать и в win32s (если Delphi 2), а 2-й - только в 9x/ME и NT/2K/XP.
Слесарь Матерящийся (2002-09-04 10:36:00) [12]Некрасивый стиль.
Можно делать так: один поток обслуживает интерфейс пользователя, а другой -- отрабатывает фоновую задачу, напр., этот самый цикл.
Программа остаётся управляемой.
Леван (2002-09-04 09:48:00) [13]To VAP:
Одно несущественное замечание
вместо <<if Br=True then>> можно <<if Br then>>
Извините
Леван
VAP (2002-09-04 08:53:00) [14]procedure Breakes;
var
I: cardinal;
begin
for I:=0 to 100000000 do
begin
Application.ProcessMessages;
if Br=True then
begin
Form1.Edit1.Text:="Breaked";
Break;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Br:=True;
end;
MBo (2002-09-04 08:22:00) [15]в полном соответствии с названием - позволяет обработать сообщения. по нажатию кнопки выставляй некий флаг, а после
Application.ProcessMessage sпроверяй его и break