Вверх ↑
Разработчик
Ответов: 26164
Рейтинг: 2127
#1: 2013-01-31 01:32:43 ЛС | профиль | цитата
petr1976 писал(а):
Можете описать алгоритм?

Я уже описывал, недалече, как несколько постов назад. Немного уточню -- событие обычного таймера есть не что иное, как отработка сообщения WM_TIMER в очереди твоего приложения. Очередь любого приложения выполняется не по прихоти приложения, а как считает нужным система, так что, система поставит сообщение WM_TIMER в твою очередь сообщений, а вот когда система отдаст это сообщение твоему обработчику, это известно только системе. Система следит за сообщениями от твоего приложения и исполнять их по очереди, окончив выполнять сообщения от приложения, система вытаскивает из стека сообщений следующее сообщение и отсылает его твоему приложению, и WM_TIMER далеко не одно сообщение в очереди от системы к твоему приложению. Если система не перерисовывает твою форму, то это событие может прийти сразу, а если двиганул форму или мышку на форме, то только после перерисовки, а если приложений несколько и все что-то рисуют на форме... Вот откуда и беруться эти задержки.
------------ Дoбавленo в 01.32:
Системные таймеры построены по другому принципу и не связаны с очередью сообщений, а работают на перекрытых асинхронных методах. Те когда мы запускаем системный таймер, то указываем метод обработки события по окончанию задержки. И если это асинхронное событие направить на интерфейсный элемент, то может получиться крах программы из-за попытки вклеится в синхронную исполняемую очередь сообщений. Предположим, в данныей момент элемент перерисовывается системой, а ему снова дается команда на перерисовку, не закончив предыдущую
карма: 22

1
Голосовали:login