生活札記 首頁 生活札記
提供一個可以讓大家無拘無束的討論園地
 
相簿相簿   常見問題常見問題   搜尋搜尋   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 


curses函式庫系列課程 NO.3 curses函式庫螢幕顯示重要觀念

 
發表新主題   回覆主題    生活札記 首頁 -> C/C++
上一篇主題 :: 下一篇主題  
發表人 內容
luckyhoo



註冊時間: 2006-07-19
文章: 447

發表發表於: 星期五 九月 01, 2006 5:01 am    文章主題: curses函式庫系列課程 NO.3 curses函式庫螢幕顯示重要觀念 引言回覆

一、螢幕(stdscr)
一般而言所謂的螢幕就是指可供寫入並顯示出來可讓我們眼睛看到的裝置,這個裝置就是我們所謂的CRT或是LCD這類的實體螢幕。
而在curses函式庫裡所謂的螢幕(stdscr),其實可以看做是我們的程式與實體螢幕溝通的橋樑,當我們在螢幕(stdscr)上作任何的處理,就會忠實的呈現在實體的螢幕上,螢幕(stdscr)指的就是待會我們會提到的「主視窗」,它實際上可以容納的字元數目,會依據終端機種類的不同而有所不同。
在圖形模式,也就是X Window的環境下,指的是其中一個視窗,那它所顯示的範圍就不會是實體螢幕整個的顯示範圍了。
在文字模式,它的大小可以是整個實體螢幕的大小,顯示範圍只能比實體螢幕要小,最大僅可為實體螢幕所能顯示的範圍。


二、視窗
每一個以curses函式庫所完成的程式,都一定會有一個「主視窗」,就是剛剛所提到的螢幕(stdscr),為了程式方便撰寫與螢幕更新的效率起見,除了主視窗外,還可以建立許許多多的「一般視窗」,但無論建立的「一般視窗」多大,最後要作輸出顯示的動作時,實際要顯示的範圍不是比「主視窗」要小,就只能是一樣大。
通常一個複雜的curses程式所需要的處理程序有以下步驟:
代碼:
視窗更新wnoutrefresh()或pnoutrefresh() --> 螢幕畫面更新doupdate()

請注意,上述的視窗可以視為curses函式庫要顯示資料在螢幕前的一個暫存緩衝區,相信這樣思考會比較容易理解。
採用此種方式實際上最後輸出的資料最多僅僅是整個螢幕(stdscr)的大小,其餘的資料處理都是背景處理,最大的好處是可以增進程式的效率,為什麼呢?原因可由三方面討論:
1.網路流量。
因為使用curses函式庫更新螢幕的資料時,對遠端的終端機使用者而言,看更新的資料量多大,就會傳輸多少的資料量過去。
假使有n個視窗疊在一起,那當你n個視窗一個個分別更新顯示時,每個視窗若有2000個字元,那它實際上所傳輸的資料量的就會有2000n個字元,可是實際上我們所需要的資料量卻只是一個視窗上所包含的資料量 - 2000個字元。
但若採用剛剛所提的處理方式的話,就會先作前置處理,只會把最後我們所需要的資料過濾出來,那資料量就只會是實際上在螢幕上所看到的字元資料,也就是一個視窗所包含的資料量 - 2000個字元。
2.執行效率。
電腦運算速度是很快的,效率的瓶頸,往往不在CPU上,大都在I/O上,像是硬碟讀取或是顯示卡上,要更新螢幕的資料時,無庸置疑的一定是透過顯示卡,也就是說當我們丟給顯示卡的資料越少時,整個處理的程序就會越快,只要把第一項所提到的網路媒介,換成顯示卡來看,就可以了解。
3.螢幕更新。
這一個部分事實上是與第二個部分所提到的「執行效率」是息息相關的,因為人類眼睛視覺暫留特性的緣故,若一直更新螢幕的畫面會造成閃爍的情形,會使眼睛容易疲勞,可以想想,若你眼睛直視前方,有人拿一樣東西一直在你面前左右晃動時,眼睛是不是很容易疲倦?
當然只要螢幕的畫面有更新,就一定會造成閃爍,但是如何盡可能加快
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    生活札記 首頁 -> C/C++ 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作