gera3323 |
---|
Можно только теорию или список функция, или готовое решение. |
В общем случае: нельзя.
Можно "в главном цикле" процесса предусмотреть функцию проверки "а не пингуют ли меня?" и отвечать соответственно.
Можно сделать функцию которая периодически будет кидать наружу что-либо. Либо в лог писать "я еще живой", либо кидать udp пакет на предопределенный порт и если там есть монитор, то он будет подхватывать эту посылку и сообщать юзеру что главный процесс еще не завис.
Главный секрет в том чтобы процесс не замыкался в себе.
Без подобной подготовки определить что процесс завис можно пожалуй только опосредованно - если в течении некоего таймаута процесс не обращался ни к одной функции ОС, то можно предположить что что-то там произошло нехорошее. Но в то-же время процесс может и просто сидеть считать что-нибудь большое типа перемножения матриц...
SendMessageTimeout() это как раз пример "а не пингуют ли меня?". Эта функция кладет в очередь процесса сообщение и ждет пока процесс прочитает это сообщение. Если прочитал, значит главный цикл процесса (который в WndProc) еще работает.
Но и соответственно если у процесса нету WndProc - эта функция становится бесполезной.