2010-10-26 11 views
12

Kbhit() ile eşdeğer bir şey arıyorum ve bu konuyla ilgili birkaç forum okudum ve çoğunluk ncurses kullanmayı önerdi.ncurses kullanarak unix'te tuş basımı kontrol etmek için bir işlev oluşturun

ncurses kullanarak C++ 'ye bir tuşa basılıp basılmadığını kontrol etmeye nasıl başlamalıyım?

ncurses tarafından sağlanan getch() işlevi pencereden karakter okur. Sadece bir tuşa basıldığında kontrol eden ve sonra getch() yapmak istediğim bir işlev yazmak istiyorum.

Şimdiden teşekkürler.

cevap

14

getch()'u kilitlenmeyen bir aramaya çevirmek için nodelay() işlevini kullanabilirsiniz; bu, herhangi bir tuşa basmadığında ERR değerini döndürür. Bir tuşa basma kullanılabilirse, giriş kuyruğundan çekilir, ancak ungetch() ile isterseniz sıraya geri itebilirsiniz.

#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); 
     } 
    } 
} 
İlgili konular