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

          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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 区。| 永嘉县| 晋中市| 定远县| 建平县| 白沙| 盈江县| 依兰县| 新化县| 体育| 邵阳县| 澄江县| 康乐县| 安平县| 潢川县| 年辖:市辖区| 高阳县| 麟游县| 中西区| 临夏市| 吴堡县| 南江县| 建瓯市| 繁峙县| 北辰区| 永昌县| 宁明县| 杭州市| 革吉县| 神木县| 无锡市| 同心县| 土默特左旗| 呼和浩特市| 抚远县| 古田县| 蓬溪县| 姚安县| 扎鲁特旗| 安阳县| 红河县|