刷新行为 (nCurses)
Refresh Behaviour (nCurses)
我最近在研究 ncurses,一个疑问突然袭来:刷新函数到底做了什么?
我搜索了一下,阅读了一些教程甚至文档,我的结论是 "refreshes" 实际屏幕的格式在 "buffer screen" 上完成(它只是更新输出在屏幕上)。
做了一些测试,我清楚地意识到我错了,因为输出显示有和没有刷新功能!下面是我做的一个简单的程序,只是为了测试它,我无法实现这个功能的实际功能。
#include <ncurses.h>
#include <string.h>
int main() {
char mesg[] = "Just a String";
int row, col;
initscr();
getmaxyx(stdscr, row, col);
while(true) {
refresh();
mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);
mvprintw(row-2, 0, "This screen has %d rows and %d columns\n", row, col);
char c = getch();
if (c == 'e') { row++; }
else if (c == 'q') { row--; }
else if (c == 'a') { col--; }
else if (c == 'd') { col++; }
}
getch();
endwin();
return 0;
}
我在整个程序中移动了刷新,我删除了它,但似乎没有任何变化。它到底有什么作用??
getch
函数调用 refresh
,这可能会让您感到困惑 将 refresh
的显式调用移动到不同的地方。
Curses 函数写入 虚拟 屏幕(即,不是真实的)并且 refresh
更新 physical 屏幕(真实的)通过比较两者并进行小的更改(如果可能)。
我最近在研究 ncurses,一个疑问突然袭来:刷新函数到底做了什么?
我搜索了一下,阅读了一些教程甚至文档,我的结论是 "refreshes" 实际屏幕的格式在 "buffer screen" 上完成(它只是更新输出在屏幕上)。
做了一些测试,我清楚地意识到我错了,因为输出显示有和没有刷新功能!下面是我做的一个简单的程序,只是为了测试它,我无法实现这个功能的实际功能。
#include <ncurses.h>
#include <string.h>
int main() {
char mesg[] = "Just a String";
int row, col;
initscr();
getmaxyx(stdscr, row, col);
while(true) {
refresh();
mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);
mvprintw(row-2, 0, "This screen has %d rows and %d columns\n", row, col);
char c = getch();
if (c == 'e') { row++; }
else if (c == 'q') { row--; }
else if (c == 'a') { col--; }
else if (c == 'd') { col++; }
}
getch();
endwin();
return 0;
}
我在整个程序中移动了刷新,我删除了它,但似乎没有任何变化。它到底有什么作用??
getch
函数调用 refresh
,这可能会让您感到困惑 将 refresh
的显式调用移动到不同的地方。
Curses 函数写入 虚拟 屏幕(即,不是真实的)并且 refresh
更新 physical 屏幕(真实的)通过比较两者并进行小的更改(如果可能)。