12

wrefresh()我有一个正在运行的小型 ncurse 程序,但除非我坚持一段时间循环,否则输出似乎不会出现。

是否有一些缓冲或什么?我尝试refresh了库中的其他函数和fflushwith 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();
}

4

2 回答 2

21

您不应该混合stdscr使用newwin(). getch()上运行stdscr,所以这是你的问题。将该调用替换为

wgetch(win);

getch()导致stdscr被倾倒在另一个窗口的顶部,并且因为这种情况发生得太快,看起来另一个窗口根本没有显示)。

于 2010-09-28T00:44:26.733 回答
1

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

于 2010-09-27T23:36:04.727 回答