最早解釋多緩衝區如何工作的方式,是通過乙個現實生活中的例項來解釋的。在乙個陽光明媚的日子,你想將水池裡的水換掉,而又找不到水管的時候,你就只能用木桶來灌滿水池。當木桶被水龍頭注滿的,關掉水龍頭,走到水池旁邊,將水到進去,然後走回到水龍頭旁邊繼續重複上述工作,如此往復直到將水池灌滿。這就類似單緩衝工作過程。當你想將木桶裡的水倒出的時候,你必須關掉水龍頭。
現在假設你用兩個木桶來做上面的工作。你會注滿第乙個木桶然後將第二個木桶換到水龍頭下面,這樣,在第二個水桶注滿的時間內,你就可以將第乙個木桶裡面的水倒進水池裡面,當你回來的時候,你只需要再將第乙個木桶換下第二個注滿水木桶,當第乙個木桶開始注水的時候你就將第二個木桶裡面的水倒進水池裡面。重複這個過程直到水池被注滿。很容易看得到用這種技術注滿水池將會更快,同時也節省了很多等待木桶被注滿的時間,而這段時間裡你什麼也做不了,而水龍頭也就不用等待從木桶被注滿到你回來的這段時間了。
當你僱傭另外乙個人來搬運乙個被注滿的木桶時,這就有點類似於三個緩衝區的工作原理。如果將搬運木桶的的時間很長,你可以用更多的木桶,僱傭更多的人,這樣水龍頭就會一直開著注滿木桶了。
在計算機圖形學中,雙緩衝是一種畫圖技術,使用這種技術可以使得畫圖沒有(至少是減少)閃爍、撕裂等不良效果,並減少等待時間。
雙緩衝機制的原理大概是:所有畫圖操作將它們畫圖的結果儲存在一塊系統記憶體區域中,這塊區域通常被稱作「後緩衝區(back buffer)」,當所有的繪圖操作結束之後,將整塊區域複製到顯示記憶體中,這個複製操作通常要跟顯示器的光棧束同步,以避免撕裂。雙緩衝機制必須要求有比單緩衝更多的顯示記憶體和cpu消耗時間,因為「後緩衝區」需要顯示記憶體,而複製操作和等待同步需要cpu時間。
基於雙緩衝機制可以實現頁交換。
頁交換初始狀態如圖所示:
如上圖所示,此時由於處於初始狀態,畫圖操作的結果都在後緩衝區中,而螢幕上顯示的則是前緩衝區中的內容。此時畫圖操作尚未完成。
畫圖操作完成之後,頁轉換操作開始執行,示意圖如圖所示:
如上圖所示,畫圖操作結束,下乙個畫圖操作的結果儲存物件指向前緩衝區,螢幕的顯示物件指向後緩衝區,此時前緩衝區變成實際意義上的後緩衝區,後緩衝區變成實際意義上的前緩衝去,即實現「頁交換」操作。
有時候也在頁交換鏈中設定多個「後緩衝區」,這是就需要多緩衝區機制的支援。
Swing雙緩衝機制
public void paint graphics g 畫出草地 paintgrass gimage 畫出小河 paintriver gimage 畫出石頭 paintstone gimage 畫出各種道具 painttool gimage 將接下來的載入到窗體畫布上去,才能考到每次畫的效果 g....
Java 雙緩衝機制
圖形的移動的時候不時會出現閃爍的現象,這是由於在同乙個繪圖表面上對圖形進行反覆繪製並擦除所導致的。舉例來說,乙個繪製的小球,圖形的繪製總是在panle元件的graphics物件上進行的,在繪製一幅小球的圖形後馬上更新小球座標,接著呼叫repaint 方法擦除已有圖形並繪製一幅新的圖形。這一過程反覆地...
c 窗體雙緩衝機制
以下是msdn的說明 雙緩衝使用記憶體緩衝區來解決由多重繪製操作造成的閃爍問題。當啟用雙緩衝時,所有繪製操作首先呈現到記憶體緩衝區,而不是螢幕上的繪圖圖面。所有繪製操作完成後,記憶體緩衝區直接複製到與其關聯的繪圖圖面。因為只在螢幕上執行一項圖形操作,所以消除了與複雜繪圖操作關聯的圖形閃爍。對於大多數...