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.

War es hilfreich?

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 und wtimeout Routinen Satz blockiert oder nicht-blockierenden Schreib- für   ein bestimmtes Fenster. Wenn delay 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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top