Je rencontre des problèmes d'obtenir des ncurses () à bloquer. L'opération par défaut semble être non bloquante (ou avez-elle oublié une initialisation)? J'aimerais que cela fonctionne comme getch () dans Windows. J'ai essayé diverses versions de
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(pas tout en même temps). Je préférerais ne pas utiliser (explicitement) utiliser WINDOW
, si possible. A while
boucle autour de getch (), la vérification d'une valeur de retour spécifique est OK aussi.
La bibliothèque de CurseSe est une transaction. Vous ne pouvez pas simplement tirer une routine et espérer le meilleur sans initialiser correctement la bibliothèque. Voici un code qui bloque correctement getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}
De ne page d'homme (accent ajouté):
Les routines
timeout
etwtimeout
Réglez le blocage ou la lecture non bloquante pour une fenêtre donnée. Sidelay
est négatif, le blocage de la lecture est utilisé (c'est-à-dire qui attend indéfiniment pour la saisie).
Vous devez appeler initscr()
ou newterm()
pour initialiser les malédictions avant de fonctionner. 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);
}