NCurses刷新

我有一个小的ncurse程序我正在运行,但输出似乎没有显示,除非我在一个while循环中粘贴wrefresh()

是否有一些缓冲或某事? 我尝试了库中的其他refresh函数和fflushstddout (我认为没有意义,但值得一试),但似乎没有任何工作。

第二个小问题:要使getch()无阻塞,我们需要调用nodelay(win,TRUE) ,对吧?

void main() { initscr(); start_color(); init_pair(1,COLOR_YELLOW,COLOR_CYAN); WINDOW *win = newwin(10,10,1,1); wbkgd(win,COLOR_PAIR(1)); wprintw(win,"Hello, World."); wrefresh(win); getch(); delwin(win); endwin(); }
void main() { initscr(); start_color(); init_pair(1,COLOR_YELLOW,COLOR_CYAN); WINDOW *win = newwin(10,10,1,1); wbkgd(win,COLOR_PAIR(1)); wprintw(win,"Hello, World."); wrefresh(win); getch(); delwin(win); endwin(); } 

您不应该在stdscr和使用newwin()创建的窗口上混合操作。 getch()stdscr运行,这就是你的问题。 用。替换该呼叫

 wgetch(win); 

getch()导致stdscr被转储到另一个窗口的顶部,因为这种情况发生的速度很快,看起来其他窗口根本就没有显示出来。

这是按设计工作的。 这允许您完全重绘下一个屏幕,但只有实际更改的部分才会在刷新时发送到终端。 这些日子并不是什么大不了的事,但是当终端连接相对较慢时会产生很大的不同。