Что означает это сообщение, существует ли API для ответа на запросы Microsoft Windows?Что означает «программа не отвечает»?
Я ищу технический ответ. Спасибо :)
Что означает это сообщение, существует ли API для ответа на запросы Microsoft Windows?Что означает «программа не отвечает»?
Я ищу технический ответ. Спасибо :)
Это означает, что программа не может обслуживать свою очередь сообщений. От documentation:
Если окно верхнего уровня перестает отвечать на сообщения в течение более нескольких секунд, система считает, что окно не отвечает. В этом случае система скрывает окно и заменяет его призрачным окном, которое имеет одинаковые Z-порядок, местоположение, размер и визуальные атрибуты. Это позволяет пользователю перемещать его, изменять его размер или даже закрывать приложение. Однако это единственные доступные действия, потому что приложение на самом деле не отвечает. Когда в режиме отладки система не генерирует окно-призрак.
Обычно это означает, что основной поток программы занят и не достаточно часто вызывает GetMessage
. Долгие задачи должны выполняться в потоке, отличном от основного потока пользовательского интерфейса.
Часто достаточно = 5 с. IsHungAppWindow (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633526%28v=vs.85%29.aspx) говорит: приложение считается не отвечающим, если оно не ждет вход, не находится в обработке при запуске и не вызвал PeekMessage в течение внутреннего тайм-аута в течение 5 секунд. Благодарю. – Nope
'Это позволяет пользователю перемещать его, изменять его размер или даже закрывать приложение.' Я прошу различаться. –
@ b1nary, если это так, вы должны отправить отчет об ошибке в Microsoft, затем –
Приложения Windows взаимодействуют с операционной системой, получая сообщения Windows. Эти сообщения обрабатываются приложением в его основном потоке в цикле.
Если приложение не может обработать свои сообщения вовремя (на несколько секунд это поле), то очередь сообщений заполняется, и окна отмечают это приложение как «не отвечающее», отображая его основное окно белого цвета и такое.
Такое поведение в основном вызвано выполнением длительной операции в том же потоке, который обрабатывает сообщения Windows. Этот поток часто упоминается как «основной поток пользовательского интерфейса». Если вы не выполняете явно многопоточную многопоточность, это может быть единственный поток вашего приложения.
Это неточно. В этом случае система отмечает, что отправленные сообщения не обрабатываются вовремя. Эти сообщения поступают из другого процесса и не доставляются прямыми вызовами оконной процедуры. Потому что это невозможно из другого процесса. Сообщения перекрестного процесса (и, действительно, перекрестные потоки) отправляются, когда целевой поток вызывает функцию отправки сообщений, такую как «GetMessage», «PeekMessage», «SendMessage» и т. Д. –
Вы правы. Все перепуталось. Исправил мой ответ. –
См. Https://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx - «Если окно верхнего уровня перестает отвечать на сообщения более чем на несколько секунд, система считает, что окно не отвечает ». – eurotrash
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