Мне нужно повторно перерисовать окно, показывающее какую-то форму непрерывного анализа. Сейчас:Что лучше всего подходит для многократного аннулирования окна с помощью InvalidateRect?
1) Если я сделаю это в WM_PAINT после картины, я в основном убиваю живопись всех остальных, поэтому ее нельзя использовать.
2) Если я делаю это по таймеру, это отчасти отстает.
Так что лучший способ сделать это, чтобы окно часто перекрашивалось, но когда ОС занята обработкой некоторых данных или рисует другие приложения, она снижает скорость. Я всегда думал, что ОС должна позаботиться о распределении мощности процессора между процессами, оставив графику вторичной, чтобы гарантировать, что фактическая обработка имеет достаточно времени, но она не выглядит так на Windows, ни на Mac.
Если вы измените данные за отображаемым им видом, 'InvalidateRect()' для отключения бит краски должен быть в порядке. Однако вам не нужно отменять какой-либо регион, кроме обновленного, поэтому вы можете принять дополнительную меру для этого. Но ** никогда ** 'InvalidateRect' после того, как вы закончите' WM_PAINT' (т. Е. После вашего «EndPaint» .Это безумие. Вместо этого отправляйте событие потока или пользовательское событие в свою очередь из вашего кода для вычисления данных и имеете * что * обработчик в вашем окне proc 'InvalidateRect' и * возможно *' UpdateWindow'. – WhozCraig
Почему тэг [cocoa]? – IInspectable
Ну, это более или менее то, что я делаю сейчас. Крайняя вещь с признанием недействительности в wm_paint я пробовал только для «fun», это действительно не имеет большого смысла. Хотя, если os будет хорошо распределять процессор, это будет идеально, чтобы получить максимальную частоту кадров без заполнения очереди запросами. –