Не блокируясь getch (), ncurses

} catch (IOException e) {
    e.printStackTrace();
}
22
задан Jonas Byström 25 May 2009 в 01:38
поделиться

3 ответа

Библиотека curses - это пакетная сделка. Вы не можете просто вытащить одну процедуру и надеяться на лучшее без правильной инициализации библиотеки. Вот код, который правильно блокирует getch () :

#include <curses.h>

int main(void) {
  initscr();
  timeout(-1);
  int c = getch();
  endwin();
  printf ("%d %c\n", c, c);
  return 0;
}
35
ответ дан 29 November 2019 в 04:12
поделиться

Из страницы руководства (курсив добавлен):

Подпрограммы timeout и wtimeout устанавливают блокировку или отключение блокировка чтения для данное окно. Если задержка отрицательная, используется блокирующее чтение (т. Е. ожидает ввода бесконечно).

8
ответ дан 29 November 2019 в 04:12
поделиться

Вам необходимо вызвать initscr () или newterm () , чтобы инициализировать проклятия, прежде чем они заработают. У меня это отлично работает:

#include <ncurses.h>

int main() {
    WINDOW *w;
    char c;

    w = initscr();
    timeout(3000);
    c = getch();
    endwin();

    printf("received %c (%d)\n", c, (int) c);
}
8
ответ дан 29 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: