getch non bloquant (), ncurses
Question
Je vais avoir quelques problèmes pour bloquer la getch de ncurses (). fonctionnement par défaut semble être non-blocage (ou ai-je manqué une initialisation)? Je voudrais que cela fonctionne comme getch () dans Windows. J'ai essayé différentes versions de
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(pas tous en même temps). Je préférerais ne pas (explicitement) utiliser WINDOW
, si possible. Une boucle de while
autour getch (), vérification d'une valeur de retour spécifique est OK aussi.
La solution
La bibliothèque curses est un package deal. Vous ne pouvez pas simplement sortir une routine et espérer pour le mieux sans initialiser correctement la bibliothèque. Voici un code qui bloque correctement sur getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}
Autres conseils
De une page de manuel (italique ajouté):
Les
timeout
et routineswtimeout
set blocage ou non-bloquante pour une fenêtre donnée. Sidelay
est négatif, lecture de blocage est utilisé (à savoir, attend indéfiniment pour l'entrée).
Vous devez appeler initscr()
ou newterm()
pour initialiser malédictions avant qu'elle ne fonctionnera. Cela fonctionne bien pour moi:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)\n", c, (int) c);
}