NCurses刷新

时间:2010-09-27 23:29:16

标签: c ncurses

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

是否有一些缓冲正在进行?我尝试了库中的其他refresh函数和fflush stddout(我认为没有意义,但值得一试),但似乎没有任何效果。

第二个小问题:要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();
}

2 个答案:

答案 0 :(得分:20)

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

替换该呼叫
wgetch(win);

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

答案 1 :(得分:2)

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