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

          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開源團隊 閱讀(334) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 长兴县| 五河县| 淳化县| 朝阳市| 郓城县| 怀来县| 宣汉县| 鱼台县| 九龙县| 海林市| 宜州市| 屯留县| 泸水县| 新巴尔虎右旗| 淳安县| 阳谷县| 秀山| 成安县| 桦川县| 江阴市| 颍上县| 九寨沟县| 乌兰县| 沿河| 旌德县| 丹凤县| 辉南县| 济阳县| 利川市| 德钦县| 德兴市| 兴隆县| 阳春市| 华安县| 鹰潭市| 舟曲县| 固镇县| 扶风县| 洪湖市| 天津市| 神池县|