Non-blocking getch (), ncurses
Frage
Ich habe einige Probleme ncurses' getch () immer zu blockieren. Standardoperation scheint nicht blockierend zu sein (oder habe ich verpasst einige Initialisierung)? Ich mag es wie getch () in Windows arbeiten. Ich habe versucht, verschiedene Versionen von
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(nicht alle zur gleichen Zeit). Ich würde es vorziehen, nicht (explizit) jeden WINDOW
verwenden, wenn möglich. Eine while
Schleife um getch (), für einen bestimmten Rückgabewert Überprüfung ist auch OK.
Lösung
Die Flüche Bibliothek ist ein Pauschalangebot. Sie können nicht nur eine Routine herausziehen und das Beste hoffen, ohne die Bibliothek richtig initialisiert wird. Hier ist ein Code, der richtig Blöcke auf getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}
Andere Tipps
einen Mann (Hervorhebung hinzugefügt):
Die
timeout
undwtimeout
Routinen Satz blockiert oder nicht-blockierenden Schreib- für ein bestimmtes Fenster. Wenndelay
negativ ist, blockiert Lese verwendet (das heißt, auf unbestimmte Zeit für die Eingabe wartet).
Sie müssen initscr()
oder newterm()
nennen Flüche zu initialisieren, bevor es funktionieren wird. Dies funktioniert gut für mich:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)\n", c, (int) c);
}