Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.139.239.67] |
|
Сообщ.
#1
,
|
|
|
Есть главная форма, на форме цветной кружок, есть поток, который раз в 1 мили секунду меняет цвет этого элемента (кружка). Вопрос, эти изменения цвета забьют системную очередь сообщений формы, или они будут как то прореживаться? Речь идет о компоненте TShape.
|
Сообщ.
#2
,
|
|
|
Цитата a_n_y_a @ есть поток, который раз в 1 мили секунду меняет цвет этого элемента (кружка) Какой в этом смысл, если при стандартной частоте монитора в 60 Гц обновление экрана происходят только раз в 1/60 = 16.7 мс ?! Цитата a_n_y_a @ Вопрос, эти изменения цвета забьют системную очередь сообщений формы, или они будут как то прореживаться? Если ты просто изменяешь цвет кисти или пера TShape (не вызывая при этом никаких методов принудительной перерисовки формы), то никакие сообщения в системную очередь вообще не посылаются. При этом просто вызывается функция InvalidateRect для области формы, занятой TShape, которая помечает эту область как "инвалидную", т.е. требующую перерисовки. А когда производить эту перерисовку, ОС решает сама и делает это не чаще тех же 10-15 мс. Поэтому из твоих 1000 изменений в секунду более 90% фактически идут коту под хвост - просто по 10 с лишним раз помечают уже помеченный инвалидный регион окна формы для его перерисовки в будущем |
Сообщ.
#3
,
|
|
|
Прореживаться никак не будут, но при забитии PostMessage вернет False
|
Сообщ.
#4
,
|
|
|
Цитата Fr0sT @ Прореживаться никак не будут Смотря какие. WM_PAINT и WM_TIMER могут "прореживаться". Насколько я понимаю, в очереди м.б. только по одному WM_PAINT для каждого окна |
Сообщ.
#5
,
|
|
|
a_n_y_a, WM_PAINT имеет один из самых низких приоритетов в очереди сообщений потока, так что ни систему, ни твою прогу эта твоя перерисовка особо не нагрузит.
|
Сообщ.
#6
,
|
|
|
Цитата Krid @ WM_PAINT имеет один из самых низких приоритетов в очереди сообщений потока Точнее не "один из", а самый низкий - Get\PeekMessage выдают WM_PAINT только в том случае, когда нет никаких других сообщений в очереди. Цитата Krid @ так что ни систему, ни твою прогу эта твоя перерисовка особо не нагрузит. Тем не менее пытаться что-то "перерисовывать" 1000 раз в сек - это глупо, т.к. ни человеческий глаз, ни соответственно монитор и ОС на такое комариное мелькание просто не рассчитаны. Реальное обновление экрана происходит не чаше 60-75 раз в сек. Соотв-но и перерисовку нужно делать примерно с такой же или более низкой частотой. |
Сообщ.
#7
,
|
|
|
Да , полностью согласен
|