如鹏网 大学生计算机学习社区

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开源团队 阅读(321) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: