如鵬網 大學生計算機學習社區

          CowNew開源團隊

          http://www.cownew.com 郵件請聯系 about521 at 163.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks

          ???在開發過程中我發現終端屏幕頻繁的刷新,看上去閃的厲害。使用截包工具(我用的是EtherDetect Packet Sniffer,在Sniffer單機端口數據的時候比Sniffer Pro易用)分析發現,每次更新一個子窗口的時候竟然整個屏幕都被刷新了,數據量非常大。為了發現問題,我編寫了下面的測試程序:
          from ACursesEX import *
          import curses

          def main():
          ??? mainwin = curses.newwin(15,50,0,0)
          ??? mainwin.box()
          ???
          ??? mainwin.addstr(0,0,"主窗口")
          ??? mainwin.refresh()
          ???
          ??? cwin = curses.newwin(5,20,2,2)
          ??? cwin.addstr(1,1,"子窗口")
          ??? cwin.box()
          ??? cwin.refresh()
          ??? while(True):
          ??????? ch = cwin.getch()
          ??????? cwin.clear()
          ??????? cwin.addch(2,1,ch)
          ??????? cwin.touchwin()
          ??????? cwin.refresh()
          ???????
          ??
          try:
          ??? initapp()
          ??? try:???????
          ??????? main()
          ??? except:???????
          ??????? traceback.print_exc()
          finally:
          ??? endapp()

          經測試每一次按鍵的時候屏幕的數據都刷新一次,經過嘗試發現把cwin.clear()改成cwin.erase()就不會出現這種問題了。查看curses的API說明才發現自己犯了一個大錯誤:
          clear( ) :
          Like erase(), but also causes the whole window to be repainted upon next call to refresh().

          ???也就是說erase只會使子窗口刷新,而clear會導致整個窗口刷新。
          看來還是自己太粗心了!

          ?

          posted on 2007-03-06 16:32 CowNew開源團隊 閱讀(331) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 福清市| 嘉兴市| 台山市| 平乡县| 石渠县| 延庆县| 江陵县| 武宣县| 苏尼特右旗| 将乐县| 比如县| 酉阳| 屯留县| 乌拉特前旗| 望谟县| 东兰县| 汤阴县| 安阳县| 荣成市| 太仓市| 邮箱| 驻马店市| 广安市| 密山市| 淮安市| 涞源县| 合川市| 木兰县| 青龙| 九江县| 乐山市| 山西省| 武平县| 来宾市| 新疆| 中江县| 甘泉县| 花莲县| 景谷| 和田市| 西藏|