Многие люди заметили, что элемент управления анимации в версии 6 библиотеки общих элементов управления больше не использует дополнительный фоновый поток для рисования анимации. Вместо этого он работает так, как если бы стиль
ACS_TIMER
был бы всегда включен, даже если вызывающий его не указывал. Почему так?Первая причина состоит в том, что фоновый поток не очень-то помогает. Чтобы рисовать прозрачные анимации, циклу рисования нужно запрашивать родителя, на котором лежит элемент управления анимацией, чтобы получить фоновый цвет, что влечёт за собой отправку сообщения-запроса основному потоку пользовательского интерфейса. Соответственно, главный поток с UI должен отвечать на сообщения, чтобы анимация рисовалась корректно. Если главный UI поток перестаёт отвечать на сообщения, то сообщение
WM_CTLCOLORSTATIC
, отправленное для определения фонового цвета, подвесит поток рисования, и анимация будет тормозить.Поэтому главному UI потоку нужно обрабатывать сообщения. А раз так, то нет никакой необходимости в фоновом потоке. UI поток может просто запустить таймер и рисовать анимацию сам, отвечая на сообщения таймера.
Вторая причина для отказа от фонового потока - он делал всё ещё только хуже. Другой поток означает больше переключений контекста и больше давления на память, поскольку дополнительный поток требует своего стека и управляющих структур данных. Конечно, это сравнительно слабая причина.
Третья причина состоит в том, что фоновый поток для рисования поощряет использование плохого кода. Использование фонового потока для прорисовки анимации означает, что UI поток может не отвечать на сообщения длительное время - и обычно это ему сходит с рук, потому что это незаметно из-за работающей анимации. В результате фоновый поток поощряет программы не обрабатывать сообщения, потому что "кажется, всё отлично работает". В результате программы перестают поддерживать отзывчивый UI, что приводит к периодическим загадочным подвисаниям в менеджере окон, когда другая программа делает широковещательную рассылку и тормозиться заблокированным окном. Это приводит к росту недовольства пользователей и типичному чувству "Windows - отстой".
Мы делаем этот "отстой" более очевидным, так что программисты, вероятнее всего, заметят, что они делают что-то не так и наконец-то сделают что-то для решения проблемы. Маскировка проблемы с фоновым потоком анимации просто позволила бы проблеме существовать и дальше.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.