NCurses Обновить - PullRequest
       8

NCurses Обновить

11 голосов
/ 28 сентября 2010

У меня небольшая программа ncurse, которую я запускаю, но, похоже, вывод не отображается, пока я не вставлю wrefresh() в цикл while.

Есть ли какая-то буферизация или что-то еще? Я пробовал другие 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 ]

20 голосов
/ 28 сентября 2010

Вы не должны смешивать операции на stdscr и окнах, созданных с newwin(). getch() работает на stdscr, так что это ваша проблема. Замените этот вызов на

wgetch(win);

(getch() вызывает сброс stdscr поверх другого вашего окна, и, поскольку это происходит так быстро, похоже, что другое окно вообще не отображалось).

2 голосов
/ 28 сентября 2010

Это работает, как задумано. Это позволяет полностью перерисовать ваш следующий экран, но только те части, которые действительно изменились, отправляются на терминал во время обновления. В наши дни это не так уж важно, но имело большое значение, когда терминальные соединения были относительно медленными.

...