Приложение Win32 приостанавливается на минимизацию оконной анимации - PullRequest
2 голосов
/ 15 апреля 2009

здесь первый постер.

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

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

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

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

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

1 Ответ

3 голосов
/ 15 апреля 2009

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

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

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

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

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

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

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

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

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

...