Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > События и вечный цикл


Автор: JetBird 4.3.2009, 13:39
Привет всем!

Наверное, ламерский вопрос задаю, т.к. в Дельфи мало программировал; суть вот какая: есть такой метод Application.Run, который передает управление в вечный цикл, позволяя приложению обрабатывать сообщения и т.д. Меж тем, в Дельфях все ориентировано на использование событий. Т.е. по нажатию кнопки возникает то, по приему пакета - сё. А если я желаю "вклиниться" в основной поток и добавить в него свой код? есть такая штука, как OnTimer, но она включается раз в N микросекунд, а мне бы надо, чтобы на каждом "шаге" выполнялась некоторая процедура. Как бы это сделать?

Автор: Rrader 4.3.2009, 14:09
Пройдясь по петле, можно найти такую строчку:
Код

if Assigned(FOnMessage) then FOnMessage(Msg, Handled);

P.S. Зачем нужно вклиниваться?

Автор: vladimir74 4.3.2009, 14:14
внутри цикла
Код

Application.ProcessMessages

Автор: JetBird 4.3.2009, 14:29
О, спасибо, Application.ProcessMessages - то, что надо. Вклиниваться в самом деле незачем.

Автор: Poseidon 5.3.2009, 00:34
Или новички шибко умные пошли, или я отупел. Но никогда бы не догадался, что в первом сообщении спрашивалось о ProcessMessages.

Автор: Christoph 5.3.2009, 08:53
Цитата(Poseidon @ 5.3.2009,  00:34)
Или новички шибко умные пошли, или я отупел. Но никогда бы не догадался, что в первом сообщении спрашивалось о ProcessMessages.

Ответ Application.ProcessMessages дали на угад  smile 

Автор: Frees 5.3.2009, 09:32
ОФФ
просто vladimir74 - телепат!

Автор: JetBird 5.3.2009, 11:18
Ну-ну, зря вы так, товарищи smile
ProcessMessages решает данную проблему простейшим способом, и хотя вопрос был задан в общей форме, а ответ решает проблему лишь частично (например, если на форме будут 2 кнопки и в каждой будет цикл с processmessages, то при нажатии первой, а потом второй (во время работы цикла первой) нужный код будет выполняться не параллельно, а последовательно - сначала закончится цикл второй, а потом - первой), и тут, вероятно, помог бы совет "пройтись по петле и найти строчку с if (assigned(...))", чтобы сделать выполнение нужного кода в принципе независимым от внешних "возбудителей", не прерывать основной поток, а плавно в него интегрироваться. 

Автор: Poseidon 5.3.2009, 11:24
JetBird, слушай, если ты все знаешь, то тему зачем создал?

Автор: vladimir74 5.3.2009, 12:33
Цитата(Poseidon @  4.3.2009,  22:34 Найти цитируемый пост)
Или новички шибко умные пошли, или я отупел. Но никогда бы не догадался, что в первом сообщении спрашивалось о ProcessMessages. 

ну этот форум не единственный, а вопросы везде повторяются  smile 
Цитата(Frees @  5.3.2009,  07:32 Найти цитируемый пост)
просто vladimir74 - телепат! 

бывают просветления в мозгУ  smile  smile 
Цитата(JetBird @  5.3.2009,  09:18 Найти цитируемый пост)
ProcessMessages решает данную проблему простейшим способом, и хотя вопрос был задан в общей форме, 

ну какой вопрос,такой ответ (это кстати подтверждает моя подпись smile ) 
Цитата(JetBird @  5.3.2009,  09:18 Найти цитируемый пост)
например, если на форме будут 2 кнопки и в каждой будет цикл с processmessages, то при нажатии первой, а потом второй (во время работы цикла первой) нужный код будет выполняться не параллельно

можно засунуть каждый цикл в отдельный поток...  smile

Добавлено через 57 секунд
Цитата(Christoph @  5.3.2009,  06:53 Найти цитируемый пост)

Ответ Application.ProcessMessages дали на угад  smile  

ну есть такая буква в этом слове  smile 

Автор: MetalFan 5.3.2009, 13:01
Цитата(vladimir74 @  5.3.2009,  12:33 Найти цитируемый пост)
можно засунуть каждый цикл в отдельный поток...  smile

и это будет, имхо, самое правильное решение smile 

Автор: vladimir74 5.3.2009, 13:37
Цитата(MetalFan @  5.3.2009,  11:01 Найти цитируемый пост)
и это будет, имхо, самое правильное решение smile 

вот теперь если я опять телепатнул, то буду не единственный. И притом при поддкржке старичков  smile  smile 

MetalFan, извени но мне почему то фраза Poseidon-а очень понравилась 

Автор: JetBird 5.3.2009, 13:51
Цитата(MetalFan @ 5.3.2009,  13:01)
Цитата(vladimir74 @  5.3.2009,  12:33 Найти цитируемый пост)
можно засунуть каждый цикл в отдельный поток...  smile

и это будет, имхо, самое правильное решение smile


а потом их придется синхронизировать.

Автор: vladimir74 5.3.2009, 14:14
Цитата(JetBird @  5.3.2009,  11:51 Найти цитируемый пост)
а потом их придется синхронизировать. 

Цитата(Poseidon @  5.3.2009,  09:24 Найти цитируемый пост)
JetBird, слушай, если ты все знаешь, то тему зачем создал? 

начинаю задаваться тем же вопросом.....

Автор: JetBird 5.3.2009, 14:39
Цитата(vladimir74 @ 5.3.2009,  14:14)
Цитата(JetBird @  5.3.2009,  11:51 Найти цитируемый пост)
а потом их придется синхронизировать. 

Цитата(Poseidon @  5.3.2009,  09:24 Найти цитируемый пост)
JetBird, слушай, если ты все знаешь, то тему зачем создал? 

начинаю задаваться тем же вопросом.....

блин, ну сорри. я в дельфях новичок, а не в программинге.

Автор: MetalFan 5.3.2009, 14:45
Цитата(JetBird @  5.3.2009,  13:51 Найти цитируемый пост)
а потом их придется синхронизировать. 

странное заявление. а что в этом сложного?

Автор: JetBird 5.3.2009, 20:34
Цитата(MetalFan @ 5.3.2009,  14:45)
Цитата(JetBird @  5.3.2009,  13:51 Найти цитируемый пост)
а потом их придется синхронизировать. 

странное заявление. а что в этом сложного?

А зачем что-то делать, если можно не делать этого? smile 

Автор: MetalFan 5.3.2009, 22:27
Цитата(JetBird @  5.3.2009,  20:34 Найти цитируемый пост)
А зачем что-то делать, если можно не делать этого?

ага, проще свалить все в кучу в главный поток и понавставлять ProcessMessages'ов

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)