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

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

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

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

Вопросов:

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

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

РЕДАКТИРОВАТЬ: Чтобы быть более конкретным - то, что мы делаем только каждые несколько секунд, вызывает насос сообщенийPeekMessage/TranslateMessage/DispatchMessage.

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

Ответы на вопрос(0)

Ваш ответ на вопрос