2009-04-15 2 views
2

первый раз постер здесь.Win32 приложение приостанавливается при минимизации анимации окна

Я пишу многопоточное потоковое аудио приложение в C++ (MSVC) на Windows XP с пакетом обновления 2 (SP2).

Проблема, с которой я столкнулся, заключается в том, что при минимизации/восстановлении любого приложения на панели задач все потоки в моем приложении приостанавливаются, пока анимация окна активна. Это влияет на меня, потому что это заставляет звук в моем приложении заикаться каждый раз, когда окно сворачивается или восстанавливается.

Снимите флажок «Анимировать окна при минимизации максимизации» в свойствах windows/system/advanced/performance «визуальные эффекты, планирование процессоров ...»/«Настройки/Пользовательская вкладка», похоже, разрешает эту проблему.

Настройка приоритета моего процесса на «Высокий» и «В реальном времени» не помогает.

Может кто-нибудь помочь пролить свет на эту тему?

ответ

3

Эти анимации, или картина окна при перемещении его вокруг (которые должны создать аналогичные проблемы) заливает окна сообщений кия с сообщениями WM_PAINT, и вызвать каждый маленький виджет/управление в окне, чтобы перерисовать себя. Это может полностью запутать компьютер и все потоки и процессы, запущенные на нем.

два возможных решения:

  • заморозить окно, то есть выбросить любые сообщения WM_PAINT в то время как окно изменения размера/минимизации/тащат. Вы также можете сделать это , используя какой-то флаг (lockRedraw) или аналогичный.

    • изменение приоритета не поможет вам, это может даже увеличить проблему хотя я ничего о стратегии диспетчеризации WXP не знаю.

Edit: забыл фактическое второе решение:

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

Пересоздать: ну я проглядел, что вы Сайд любой окно. Только решение 2, использующее большие буферы, может помочь там. Звуковые буферы обычно попадают в некоторый буфер на аппаратном обеспечении, и как только они там, это не должно быть проблемой.

Другая возможность приходит на ум: Эти анимации подложены звуками. Проверьте, какой звук вы установили для максимизации/минимизации. Выключите и повторите попытку

Если проблема не устранена, возможно, это связано с плохой графической картой. Если это не так, проверьте, все ли настройки вашего звука (возможно, directSound? Не знаю).Может быть, есть конфликт ресурсов, который вы можете кодировать. (Не в аппаратном менеджере, а в вашем способе доступа к звуковому устройству.)

+0

ok. Последнее редактирование приходит как комментарий: Я просто помнил, что звуки играют независимо от анимации, и вы сказали, что это сработало. Делают ли анимации всплеск вашего процессора? – AndreasT

+0

Второе решение кажется более вероятным. (Spy ++ показал около 3-6 сообщений краски за мин/восстановление) Да, я использую dsound/программные буферы. Большие звуковые буферы помогают, но общая проблема заключается в том, что другие потоки, передающие звук в dsound, приостанавливаются - передача голоса в реальном времени. – 2009-04-15 17:12:21

+0

Нет. Процессор бездействует во время анимации с подсветкой. – 2009-04-15 17:13:07

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