2010-10-26 13 views
12

Ho cercato un equivalente a kbhit() e ho letto diversi forum su questo argomento, e la maggior parte sembra suggerire l'uso di ncurses.Creare una funzione per verificare la pressione dei tasti in unix utilizzando ncurses

Come devo verificare se un tasto viene premuto in C++ utilizzando ncurses.

La funzione getch() fornita da ncurses legge il carattere dalla finestra. Mi piacerebbe scrivere una funzione che controlla solo se c'è un tasto premuto e poi voglio fare getch().

Grazie in anticipo.

risposta

14

È possibile utilizzare la funzione nodelay() per attivare getch() in una chiamata non bloccante, che restituisce ERR se non è disponibile la pressione di un tasto. Se è disponibile un tasto premuto, viene estratto dalla coda di input, ma è possibile reinserirlo in coda, se lo si desidera, con ungetch().

#include <ncurses.h> 
#include <unistd.h> /* only for sleep() */ 

int kbhit(void) 
{ 
    int ch = getch(); 

    if (ch != ERR) { 
     ungetch(ch); 
     return 1; 
    } else { 
     return 0; 
    } 
} 

int main(void) 
{ 
    initscr(); 

    cbreak(); 
    noecho(); 
    nodelay(stdscr, TRUE); 

    scrollok(stdscr, TRUE); 
    while (1) { 
     if (kbhit()) { 
      printw("Key pressed! It was: %d\n", getch()); 
      refresh(); 
     } else { 
      printw("No key pressed yet...\n"); 
      refresh(); 
      sleep(1); 
     } 
    } 
} 
Problemi correlati