2015-06-02 8 views
2

Что означает это сообщение, существует ли API для ответа на запросы Microsoft Windows?Что означает «программа не отвечает»?

Я ищу технический ответ. Спасибо :)

+2

См. Https://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx - «Если окно верхнего уровня перестает отвечать на сообщения более чем на несколько секунд, система считает, что окно не отвечает ». – eurotrash

+0

http://stackoverflow.com/questions/6997310/busy-application-leads-to-false-not-ответства-state-on-windows-7-wm-update, http://stackoverflow.com/questions/1691251/what-make-a-process-seem-as-not-response-in-windows, http://stackoverflow.com/questions/402832/avoiding-not-ответ -label-in-windows-while-processing -lots -of-data-in-on, попробуйте выполнить поиск. – CodeCaster

ответ

4

Это означает, что программа не может обслуживать свою очередь сообщений. От documentation:

Если окно верхнего уровня перестает отвечать на сообщения в течение более нескольких секунд, система считает, что окно не отвечает. В этом случае система скрывает окно и заменяет его призрачным окном, которое имеет одинаковые Z-порядок, местоположение, размер и визуальные атрибуты. Это позволяет пользователю перемещать его, изменять его размер или даже закрывать приложение. Однако это единственные доступные действия, потому что приложение на самом деле не отвечает. Когда в режиме отладки система не генерирует окно-призрак.

Обычно это означает, что основной поток программы занят и не достаточно часто вызывает GetMessage. Долгие задачи должны выполняться в потоке, отличном от основного потока пользовательского интерфейса.

+0

Часто достаточно = 5 с. IsHungAppWindow (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633526%28v=vs.85%29.aspx) говорит: приложение считается не отвечающим, если оно не ждет вход, не находится в обработке при запуске и не вызвал PeekMessage в течение внутреннего тайм-аута в течение 5 секунд. Благодарю. – Nope

+0

'Это позволяет пользователю перемещать его, изменять его размер или даже закрывать приложение.' Я прошу различаться. –

+0

@ b1nary, если это так, вы должны отправить отчет об ошибке в Microsoft, затем –

2

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

Если приложение не может обработать свои сообщения вовремя (на несколько секунд это поле), то очередь сообщений заполняется, и окна отмечают это приложение как «не отвечающее», отображая его основное окно белого цвета и такое.

Такое поведение в основном вызвано выполнением длительной операции в том же потоке, который обрабатывает сообщения Windows. Этот поток часто упоминается как «основной поток пользовательского интерфейса». Если вы не выполняете явно многопоточную многопоточность, это может быть единственный поток вашего приложения.

+0

Это неточно. В этом случае система отмечает, что отправленные сообщения не обрабатываются вовремя. Эти сообщения поступают из другого процесса и не доставляются прямыми вызовами оконной процедуры. Потому что это невозможно из другого процесса. Сообщения перекрестного процесса (и, действительно, перекрестные потоки) отправляются, когда целевой поток вызывает функцию отправки сообщений, такую ​​как «GetMessage», «PeekMessage», «SendMessage» и т. Д. –

+0

Вы правы. Все перепуталось. Исправил мой ответ. –