題 什麼原因導致Windows XP延遲渲染失敗?


我們都知道程序或操作系統本身凍結的情況,你唯一能做的就是繪製系統渲染的數百萬個對話框。我在說這個(在這裡演示):

Windows lagscreen

為什麼會這樣?為什麼我總是只在Windows XP上遇到它?這不是在Linux,Mac或其他Windows版本上發生的嗎?如果沒有,為什麼?實際上,這個bug有沒有官方/通用名稱?


5
2017-08-08 23:16


起源


今天發生了X11事件。 :) - Blauhirn


答案:


這叫做a “幽靈之窗”。發生的情況是進程掛起或死鎖,因此無法響應繪製消息以更新其窗口。為了處理這種情況,Windows接管並繪製窗口,直到程序再次響應並自行繪製(或被殺死或崩潰)。

在舊版本的Windows中,凍結的窗口用背景顏色繪製為實心,但在XP中,Windows會截取窗口的屏幕截圖,因為它是最後一次更新,並使用它來繪製它。當然,如果窗口的某些部分被覆蓋(就像你將它拖到屏幕外),那麼Windows只能用背景顏色繪製它(這就是為什麼在將它拖到所有方向的屏幕後,它最終完全空白)。

另外,當你拖動 其他 在它上面的窗口,它們會留下痕跡,因為當它的一部分被揭開時,凍結的窗口不會響應繪製消息。

在Vista +中,Windows仍然像XP中一樣繪製鬼窗,但它使用了一種技巧,使窗口在某種程度上看起來仍然存在;您仍然可以移動並最小化它,而不會丟失最後更新的圖像或獲得鏡像效果。它現在做的是隱藏實際的凍結窗口,並用一個新的臨時窗口替換它,該窗口的大小和形狀與凍結的窗口相同。新窗口塗有冷凍窗口的屏幕截圖,但是帶有淡白色的洗滌。現在,當你在其上拖動其他窗口時,它會保留原始(幻影)圖像,因為它實際上並未被凍結;它通過繪製存儲的屏幕截圖來處理繪製消息。

微軟員工 雷蒙德陳 和 馬特伊森 很好地覆蓋了它。

當然,Mac,Linux等都以自己的方式處理窗口繪製和管理,因此它們以不同的方式響應凍結的窗口。


5
2017-08-09 01:32



為了記錄,你會很高興知道Mac OS X 10.9 aka Mavericks現在包括這個功能: d.pr/i/Pe4U+ - Gregoire D.