📄 00000001.htm
字号:
#include <stdio.h> <BR>#include <curses.h> <BR> <BR>int main() <BR>{ <BR> int line; <BR> int i; <BR> char c; <BR> <BR> initscr(); <BR> refresh(); <BR> for(line=0;line<LINES;line++){ <BR> move(line,line); <BR> c=line+'0'; <BR> addch(c); <BR> for(i=0;i<50000;i++); <BR> refresh(); /* refresh() is moved to here!! */ <BR> } <BR> endwin(); <BR>} <BR>ccsun17 [HW/Curtest]% <BR>------------ <BR> 为了要了解 refresh 的功用,我们一定要仔细的比较这两个程式的差 <BR> 别在哪。我们可以发现这两个程式的差别就在 refresh 的位置不同,在 2f.c <BR> 中,refresh 的位置在回圈外面,而 2s.c 中的 refresh 在回圈的里面。 <BR> 在执行时我们可以清楚的看出 2f.c 的输出是 "一起" 出现的,而 2s.c <BR> 的输出是 "一个一个" 的,我们一定要注意到这个状况,因为这是由 refresh <BR> 位置不同而改变的。 <BR> 现在,我们可以来看看 refresh 的功用是甚麽了。refresh 的功用主 <BR> 要是把输出的资料对映到萤幕上。也许有人会奇怪,我们输出的资料不都 <BR> 会直接出现在萤幕上吗? 事实上对 curses 来讲是有些不一样的,因为它 <BR> 为了机器处理资料以及显示的效益,它有一块记忆体专门把输入的资料储 <BR> 存起来,然後在我们使用 refresh 时将它所对映的字元放在萤幕上。所以 <BR> 在我们使用 refresh 时要好好的考虑它的位置,这样才可以使我们的程式 <BR> 更有效率。 <BR> 我们可以看看 2f.c 和 2s.c 这两个程式的差别,在 2f.c 中,我们 <BR> 可以看到refresh 是在回圈之外的,所以程式在执行的时後会把资料都先 <BR> 放到记忆体中,然後呼叫 refresh 时才会把它们对映到萤幕上。所以我们 <BR> 看到的输出是 "一起" 出现的。 <BR> 而 2s.c 中的refresh 是在回圈之中的,所以每当我们放入资料後, <BR> 程式便要把资料对映到萤幕上一次,所以我们看到的资料就是 "一个一个" <BR> 出现的。 <BR> 所以我们可以了解到 2f.c 所用的时间会比 2s.c 少,因为 2s.c 中 <BR> 共执行 refresh LINES 次,而 2f.c 中只执行refresh 一次。如果这个回 <BR> 圈的执行次数很大的话,我们就可以想像到 2s.c 的执行时间会远比 2f.c <BR> 多出许多。这样,我们就可以了解到 refresh 位置对程式效率的重要性了 <BR> 。 <BR> <BR> 此外,在这两个程式中,我们还可以看到有一行 <BR> "for(i=0;i<50000;i++);" <BR> ,这是为了让大家能看出 2s.c 中的程式是 "一个一个" 出来的。如果我 <BR> 们把 50000 换成一个更大的数字,就更能看出 2s.c 的资料确是 "一个一 <BR> 个" 出来的。 <BR> <BR> <BR> 讲完了 refresh ,我们就可以再来看看另外两个函数 move 和 addch <BR> 。move 的参数有两个,分别是所要移到的列数以及行数,也就是这样: <BR> <BR> move(int y,int x); <BR> <BR> (0,0) x (0,COLS-1) <BR> ┌————————┐ <BR> │ | │ <BR> │ | │ <BR> y│------_要移到这 │ <BR> │ │ <BR> │ 这是萤幕 │ <BR> └————————┘ <BR> (LINES-1,0) (LINES-1,COLS-1) <BR> <BR> 而且 -1<y<LINES -1<x<COLS ,x 和 y 皆为整数。要注意到,第一个 <BR> 参数是 y 不是 x ,这和 pc 上某些 c 的函数是不太相同的。 <BR> <BR> 接下来是 addch ,这个函数是用来在游标所在位置放入指定的字元。 <BR> 但我们要注意到,它是将资料放在游标所在的位置的资料区,并非在萤幕 <BR> 上放字元。更有某些版本 (事实上是大多数的) 的 curses 的游标位置也 <BR> 不是我们在萤幕上所看到的位置,因为游标的位置也被 curses 记下来了 <BR> 。所以在我们始用 move 和 addch 时也要注意配合 refresh 的使用。 <BR> <BR>-- <BR>Luke Lin. 林文□ <BR>e-mail address:<A HREF="mailto:wdlin@CCCA.NCTU.edu.tw">wdlin@CCCA.NCTU.edu.tw</A> <A HREF="mailto:u8222002@cc.nctu.edu.tw">u8222002@cc.nctu.edu.tw</A> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -