Вверх ↑
Ответов: 4612
Рейтинг: 746
#1: 2019-01-03 17:02:18 ЛС | профиль | цитата
Neo писал(а):
Считал что Synchronize ждет исполнения события а DeferredEvent не ждет.
Правильно считал. Только в первой схеме нечего ждать (нету продолжительных операций, все сообщения обрабатываются достаточно быстро). Непонятно что должен показать первый пример. Thread.FastStop=False - сознательно? Тогда зачем там таймеры (тем более, повторные вызовы doTimer ничего не делают)? По своей сути таймер - это ещё один источник сообщений в дополнение к тем двум компонентам: Synchronize - вызывает сообщение сразу и ждёт обработки, DeferredEvent - вызывает "когда-то потом", Timer - вызывает "когда-то потом примерно с указанной периодичностью".
Если таймер + MessageBox были призваны просто занять главный поток, чтобы проверить ждут ли его освобождения Synchronize/DeferredEvent, то, вероятно, MessageBox - неудачный способ задержки в данном случае, так как само окно MessageBox пропускает на обработку сообщения от Synchronize/DeferredEvent, потому что они ему неизвестны, а блокирует только оконные сообщения, не предназначенные ему (а то и вообще разрешает всё, кроме попыток активации других окон, чтобы самому быть наверху).
Neo писал(а):
и сообщения от DeferredEvent приходят реже чем от Synchronize
Вполне возможно что очередь сообщений переполняется и есть пропуск сообщений.
карма: 26

0
Редактировалось 4 раз(а), последний 2019-01-03 17:15:59