tutorial nodelay linux g++ blocking ncurses getch

linux - tutorial - nodelay curses python



Sin bloqueo getch(), ncurses (3)

Estoy teniendo algunos problemas para que getc () de ncurses se bloquee. ¿Parece que la operación predeterminada no es de bloqueo (o me he perdido alguna inicialización)? Me gustaría que funcione como getch () en Windows. He probado varias versiones de

timeout(3000000); nocbreak(); cbreak(); noraw(); etc...

(No todos al mismo tiempo). Preferiría no usar (explícitamente) ninguna WINDOW , si es posible. Un bucle while alrededor de getch (), verificando un valor de retorno específico también está bien.


De una página de manual (énfasis añadido):

Las rutinas de timeout y wtimeout configuran el bloqueo o no bloqueo de lectura para una ventana determinada. Si el delay es negativo, se utiliza la lectura de bloqueo (es decir, espera indefinidamente la entrada).


La biblioteca de curses es un paquete. No puede simplemente sacar una rutina y esperar lo mejor sin inicializar correctamente la biblioteca. Aquí hay un código que bloquea correctamente en getch() :

#include <curses.h> int main(void) { initscr(); timeout(-1); int c = getch(); endwin(); printf ("%d %c/n", c, c); return 0; }


initscr() llamar a initscr() o newterm() para inicializar los curses antes de que funcione. Esto funciona bien para mi:

#include <ncurses.h> int main() { WINDOW *w; char c; w = initscr(); timeout(3000); c = getch(); endwin(); printf("received %c (%d)/n", c, (int) c); }