windows程式介面卡死的原因
阿新 • • 發佈:2018-11-04
windows的UI程式都是訊息驅動的,所以出現介面卡死,思考的方向是訊息迴圈是不是能出現問題了。下面分析windows程式介面卡死的幾個可能的原因:
-
主執行緒(UI執行緒)出現死迴圈。
如果主執行緒出現死迴圈,那麼windows將不能從訊息佇列中取出訊息,並進行處理,所以出現卡死現象。為了驗證是這個原因導致介面卡死,開啟工作管理員,如果該程序的cpu使用率一直保持非零,比如一直保持在3%,那麼介面卡死的原因是主執行緒死迴圈了。
-
主執行緒和其他的執行緒由於資源或者鎖爭奪,出現了死鎖。
如果主執行緒由於跟其他的執行緒由於爭奪資源或者鎖,出現了死鎖,那麼主執行緒會一直等待資源或者鎖,導致主執行緒不能繼續往下執行,分發和處理訊息,所以出現卡死。這種情況下,工作管理員中這個程序的cpu使用率一般是0,也有意外是除這個執行緒外,其他的執行緒也在執行,耗費cpu。所以最好的辦法是使用偵錯程式,掛載在這個程序上,觀察這個程序的各個執行緒呼叫棧,觀察執行緒等待的資源等。
-
程序被除錯掛載了,偵錯程式在一個斷點處斷下。
這種情況出現的非常少,只有在除錯一個程式的時候才會出現。
-
程式有GDI物件洩漏,導致介面卡死。
對於這種情況。通過觀察工作管理員的GDI資料可以發現問題。首先工作管理員的“檢視”->“選擇列”出現如下的介面,選擇GDI物件。這樣在工作管理員中就可以看到程序的GDI物件數目了。如果GDI物件數達到千數量級,那麼很有可能是這個原因。