입력을 기다리는 getchar() 함수 종료방법 문의드립니다.
안녕하세요.
인터넷에서 키보드의 키를 누른 순간 동작을 하는 소스를 구해
아래와 같이 쓰레드에 적용하여 잘 쓰고 있었습니다.
void* getch(void* pData)
{
int ch;
struct termios buf;
struct termios save ;
// CQueueMsg* queueMsg ;
// msg_data mData ;
pData = NULL ; // for avoid warning at compile...
// queueMsg = CQueueMsg::getQueue() ;
while(1)
{
tcgetattr(0, &save) ;
buf = save ;
// buf.c_lflag &= ~(ICANON | ECHO) ;
buf.c_cc[VMIN] = 1 ;
buf.c_cc[VTIME] = 2 ;
buf.c_lflag &= ~ICANON ;
buf.c_lflag &= ~ ECHO ;
tcsetattr(0, TCSAFLUSH, &buf) ;
ch = getchar() ;
tcsetattr(0, TCSAFLUSH, &save) ;
// mData.mainMsg= MSG_KEYBOARD ;
// mData.ch = ch ;
// queueMsg->push_back(&mData) ;
// printf("in getch... pushback : %x\n", mData.mainMsg) ;
if(ch == 'q' || ch == 'Q')
break ;
usleep(1000) ;
}
return NULL ;
}
키보드에서 q를 누르면 프로그램이 종료되도록 하였구요.
그렇게 잘 쓰다가...
특정 리모콘을 누르면 종료되도록 했는데 Hangup 이 되길래 디버깅을 해 보니,
위 getchar() 에서 키보드 입력이 들어올 때까지 블럭이 되었더군요.
흥~ 하고 키보드가 눌려진것처럼 하면 되겠다~ 싶어 이것저것 시도를 해 보았는데,
의외로 뜻대로 안되네요.
정리하면 위 상황에서 키보드의 'q'를 눌러서가 아닌, 다른 방법으로
getchar() 함수를 벗어나고 싶은데요.
고수분들의 조언 부탁드립니다.
그럼, 즐거운 하루 되세요.
댓글 달기