Библиотеки Обновить


У меня есть небольшая программа 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 10

2 ответа:

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

wgetch(win);

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

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