問一個難倒所有編程高手的問題:Windows下怎么通過代碼判斷一個行程真的徹底沒回應了?
uj5u.com熱心網友回復:
先定義沒回應的概念...uj5u.com熱心網友回復:
就是不回應連接了,或者無法切換到并正常顯示軟體界面uj5u.com熱心網友回復:
可以使用Windows API函式: IsHungAppWindow (user32.dll),判斷應用程式是否回應。不過,MSDN提示此函式可能會在后續版本中更改或洗掉,最好做好判斷。 SendMessageTimeout 函式發送WM_NULL訊息也可以判斷視窗是否回應。uj5u.com熱心網友回復:
還有別的方法嗎?uj5u.com熱心網友回復:
SendMessageTimeout 函式發送WM_NULL訊息可能會誤判uj5u.com熱心網友回復:
這兩種方式都是MSDN提到的,是比較簡潔的。回應不回應的界限不是那么涇渭分明,如果有誤判就得分多種情況,臨界值需要自己調。軟體都是不斷更新發展的,沒那么多一勞永逸的法。判斷連接是不是回應,直接去連接判斷回傳值是最簡便的方法。uj5u.com熱心網友回復:
若都是自己寫的程式,做個看門狗;狗不叫,就死掉!uj5u.com熱心網友回復:
但不可能每個程式都配一個狗uj5u.com熱心網友回復:
用這個IsHungAppWindowuj5u.com熱心網友回復:
給執行緒做一個心跳。心跳停了,它也就死了。uj5u.com熱心網友回復:
列舉行程,獲得行程ID,WaitForSingleObject不斷的判定行程是否存在uj5u.com熱心網友回復:
行程ID不存在了還好說,但要是行程ID存在實際行程已無回應,這個才是本帖所要解決的問題。uj5u.com熱心網友回復:
給執行緒做一個心跳。心跳停了,它也就死了這個不知具體實作方法,是不是要給受控執行緒發心跳包?不是煩請細說一下
uj5u.com熱心網友回復:
你構造出了上面兩種方式都誤判的情景了?你認為無回應的邊界在哪里?比如超時時間,無反饋訊息或回傳結果。
uj5u.com熱心網友回復:
確實有一定難度,但我相信是有辦法的uj5u.com熱心網友回復:
真沒想到就這么一個問題竟能難倒全天下的英雄好漢,各IT大俠uj5u.com熱心網友回復:
這恐怕已經不是一個實際程式問題了。最近看到一個技術論壇上有人提了一個問題:怎樣創建一個能被所有語言呼叫的dll,結果被編輯關閉了。原因是它不是一個具體問題,它含糊不清、過于寬泛、不完整。一個有辨別力的問題應該有邊界和可證偽性,并且是可驗證的和操作主義的。所以應該先理清概念,構造出需要解決的那個具體問題情景。
uj5u.com熱心網友回復:
是問題不夠明確?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/58249.html
下一篇:tw6869視頻采集的demo
