Domanda

Sto avendo alcuni problemi a far getch ncurses' () per bloccare. Funzionamento di default sembra essere non bloccante (o mi sono perso un po 'di inizializzazione)? Vorrei farlo funzionare come getch () in Windows. Ho provato varie versioni di

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

(non tutti allo stesso tempo). Preferirei non (esplicitamente) utilizzare a qualsiasi WINDOW, se possibile. Un ciclo while intorno getch (), il controllo per un valore di ritorno specifico è OK troppo.

È stato utile?

Soluzione

La libreria curses è un pacchetto. Non si può semplicemente tirare fuori una routine e sperare per il meglio senza inizializzare correttamente la libreria. Ecco un codice che correttamente blocchi sulla getch():

#include <curses.h>

int main(void) {
  initscr();
  timeout(-1);
  int c = getch();
  endwin();
  printf ("%d %c\n", c, c);
  return 0;
}

Altri suggerimenti

una pagina man (enfasi aggiunta):

  

Le routine timeout e wtimeout set blocco o non bloccante per leggere   una data finestra. Se delay è negativo, il blocco viene usata la lettura (cioè,   attesa a tempo indeterminato per l'ingresso).

È necessario chiamare initscr() o newterm() per inizializzare maledizioni prima che funzionerà. Questo funziona bene per me:

#include <ncurses.h>

int main() {
    WINDOW *w;
    char c;

    w = initscr();
    timeout(3000);
    c = getch();
    endwin();

    printf("received %c (%d)\n", c, (int) c);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top