![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие OnTimer [D7, XP]
Alex_C © (2011-06-20 15:48:00)Событие OnTimer компонента TTimer выполняется в основном потоке или как у мультимедийного таймера в отдельном?
Юрий Зотов (2011-06-22 17:42:00) [1]
> Alex_C (22.06.11 17:30) [10]
> а издают их не поймешь кто!
Ну, не все так уж плохо. Ведь товарищ Хреань откуда все это узнал? В конечном счете, из тех же самых книжек. Значит, хорошие книжки все же есть.
PS
А написано и правда хорошо - полно, просто и понятно.
PPS
Еще бы на абзацы разбить...
:o)
Alex_C (2011-06-22 17:33:00) [2]В догонку:
Скопировал то, что написал Хреань себе в комп - и другим не "профи" советую сделать тоже самое - во всяком случае для меня этот вопрос закрыт!
Еще раз спасибо!
Alex_C (2011-06-22 17:30:00) [3]Спасибо всем :) Ну меня не так уж и просто запутать :)
Теперь отдельно для Хреань:
ответь мне, дорогой товарищь, почему ты не издаешь книги, а издают их не поймешь кто!
Очень редко когда можно прочитать столь толковое и понятное объяснение, а самое главное - полное! После такого объяснения вопросов не остается. Спасибо большое!!!!
icWasya (2011-06-22 16:50:00) [4]> Хреань (22.06.11 14:06) [8]
..... в доме который построил Джек.
Хреань (2011-06-22 14:06:00) [5]> Anatoly Podgoretsky © (20.06.11 16:24) [6] Могут, если таймер не запрещен, при этом один таймер не влияет на другой.
Толя, не запутывай человека, он и сам по себе запутается.
> Alex_C (20.06.11 15:55) [2]
Методы OnTimer() двух таймеров будут выполняться в разное время, по очереди, не пересекаясь, не одновременно. Таймеры работают в одном потоке, и события таймеров будут обрабатываться в одном потоке по очереди. Одновременно методы OnTimer() выполняться не будут. В ходе своей работы любая программа (Application: TApplication) циклическиделает выборку сообщений из очереди в основном потокеи вызывает обработчики соответствующих сообщений, то есть, само собой разумеется, что обработчики эти вызываются по очереди в основном потоке; но если твоя программа будет долго выполнять какие-то вычисления и перестанет делать выборку из очереди сообщений, то и методы OnTimer() срабатывать не будут; такая ситуация будет сохраняться вплоть до момента, когда программа закончит длительные вычисления и снова начнет делать выборку сообщений; кстати, для таких ситуаций есть метод Application.ProcessMessages(), который принудительно инициирует выборку сообщений из очереди, в том числе - и сообщений таймера; то есть, если вызвать Application.ProcessMessages(), то внутри этого метода будут выбраны имеющиеся там сообщения таймеров и вызваны соответствующие таймерам обработчики событий OnTimer(); при этом в очереди будут находиться сообщения таймеров, попавшие в нее (их туда кидает операционная система) в период между предыдущим циклом выборки сообщений и текущим циклом, инициированным этим самым Application.ProcessMessage().
MsGuns (2011-06-21 13:36:00) [6]Удалено модератором
Anatoly Podgoretsky (2011-06-20 16:24:00) [7]> Alex_C (20.06.2011 15:55:02) [2]
Могут, если таймер не запрещен, при этом один таймер не влияет на другой.
Anatoly Podgoretsky (2011-06-20 16:23:00) [8]> Alex_C (20.06.2011 15:48:00) [0]
Это событийно ориентированый компонент
Palladin (2011-06-20 16:05:00) [9]OnTimer это компонент-обертка над событием WM_TIMER, которое обрабатывает очередь сообщений, а очередь это очередь... как в магазине...
Медвежонок Пятачок (2011-06-20 16:05:00) [10]осталось только спросить себя - зачем вообще нужны два таймера
Alex_C (2011-06-20 15:55:00) [11]Спасибо!
Т.е. как я понимаю синхронизировать работу 2-х TTimer, если они работают с одним и тем же окном вывода , нет надобности? Потому как одновременно обратиться они к нему не смогут.
Palladin (2011-06-20 15:50:00) [12]в основном