Приложение «Занято» приводит к ложному состоянию «Не отвечает» в Windows 7 - WM_UPDATE

Во время длительной работы наше приложение C ++ Win32 показывает модальное диалоговое окно состояния с полосой процесса, которая обновляется нерегулярно каждые несколько секунд или около того. Начиная с Windows 7 мы поняли, что Windows довольно скоро показывает сообщение «кажется, зависает ...» и / или добавляет «Не отвечает» в строке заголовка нашего окна.

Мы выяснили, что диалог процесса должен обрабатывать сообщения, чтобы избежать этого. В частности, кажется, что Windows 7 постоянно отправляет сообщения WM_UPDATE, чтобы проверить, жива ли наша программа. Раньше мы отключили всю ненужную обработку сообщений в этом диалоговом окне, поскольку прогоны профилей показывают, что они сильно замедляют работу.

Но, хотя мы думали, что исправили эту проблему, пользователи снова сообщают о таких проблемах: Windows показывает «похоже, зависает .. . »и / или добавляет« Не отвечает »в строку заголовка нашего окна, хотя мы обрабатываем все события каждые несколько секунд.

Вопросы:

  • Есть ли какая-либо документация об этом изменении поведения в Windows 7 (или Windows Vista) ? Мы не нашли. Мы также обнаружили ряд других изменений в поведении обмена сообщениями.

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

EDIT: Чтобы быть более конкретным - то, что мы делаем только каждые несколько секунд, - это вызов насоса сообщений PeekMessage / TranslateMessage / DispatchMessage .

Поскольку это довольно старая устаревшая программа, в ближайшем будущем использование отдельного рабочего потока невозможно. Мы, конечно, делаем это для нового кода. Также обратите внимание, что я считаю, что это поведение определенно изменилось в Windows Vista / Windows 7. Я не нашел никакой документации по этому поводу.

8
задан RED SOFT ADAIR 9 August 2011 в 15:10
поделиться