2012-05-15 3 views
1

Я использую стиль WS_EX_COMPOSITED в своем приложении, но его запуск CPU до 100%, есть способ остановить мой рисунок приложения на некоторое время и возобновить только тогда, когда мне нужно? Некоторые люди предлагают использовать Sleep's, но где именно в WndProc я могу спать?WS_EX_COMPOSITED - высокий CPU

Заранее спасибо.

ответ

4

Не использовать Sleep. Это решение практически не имеет проблем.

Это правда, что WS_EX_COMPOSITED может обрабатывать CPU, но в основном на XP в моем опыте. По сравнению с Vista и выше наблюдается гораздо меньший рост производительности. Однако, если ваше приложение простаивает, оно не будет перерисовываться. Если ваш процессор равен 100%, а приложение простаивает, вы делаете что-то не так в своей обработке WM_PAINT. То, что вы описываете, звучит как бесконечный цикл красок. Если вы все сделаете правильно, этого не произойдет, даже если вы используете WS_EX_COMPOSITED.

Что касается правильного способа двойной буферизации, то BeginBufferedPaint - это современный способ сделать это, на Vista и выше.

0

Если вы спите поток приложения, это сделает пользовательский интерфейс приложения невосприимчивым. Мне кажется, что вам нужно реализовать свой код рисования в своем потоке. Затем вы можете спать в этом потоке, не затрагивая остальную часть вашего приложения, хотя я рекомендую использовать события и вызовы WaitForSingleObject/WaitForMultipleObjects вместо сна.

Смежные вопросы