Показать сообщение отдельно
  #2  
Старый 19.05.2019, 18:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, вообще понятие, что программа "зависла" нет.
То, что мы называем зависла, это просто значит, что она выполняет какие-то действия. Самый частый случай - программа по каким-то причинам вошла в бесконечный цикл. При этом, если цикл написан корректно (с учетом, что он может исполняться долго), то внешне это не выглядит, что программа "висит".
Винда определяет "висение" программы по тому, что она не отвечает на сообщения, что совершенно на самом деле не значит, что она висит, просто может выполняться какая-то длительная операция. Например, срвременные браузеры на старых (читай относительно медленных) компутерах в какой-то момент при загрузке могут отражаться как зависшие (Не отвечает или Not responding в заголовке окна).

Т.е. по твоему вопросу - надо делать примерно так же.
Если программа, которую ты мониторишь, твоя, то сделай в ней обработку какого-нибудь твоего сообщения. Монитор посылает его, если в течении какого-то времени/итераций это сообщение не обрабатывается, то убивай процесс.
Если программа не твоя, то пробуй посылать какое-нить из стандартных сообщений, которое точно должно обрабатываться, например, WM_PAINT.
Ответить с цитированием