在函数boo()
中,我按一个键,然后调用函数doSthTimeConsuming()
。
现在我在doSthTimeConsuming()
期间按键。
问题是密钥是缓冲的,在下一次迭代中boo()
已经有了输入。
我可以先在boo()
中清除或禁用键盘的缓冲吗?
void boo()
{
while(1)
{
c = getch();
switch(c)
...
break;
}
}
void doSthTimeConsuming()
{
usleep(1000000);
}
int main()
{
WINDOW* main_win = initscr();
cbreak();
noecho();
keypad(main_win, TRUE);
while(1)
{
boo();
doSthTimeConsuming();
}
return 0;
}
EDIT:
我发现了一种解决方法,但我仍在寻找清除缓冲区的解决方案。
答案 0 :(得分:3)
为此目的有一个功能:flushinp()
http://pubs.opengroup.org/onlinepubs/007908799/xcurses/flushinp.html
答案 1 :(得分:1)
我在收到输入后使用keypad(main_win, FALSE);
解决问题,并在需要时启用keypad(main_win, TRUE);
。
void boo()
{
keypad(main_win, TRUE);
while(1)
{
c = getch();
switch(c)
...
break;
}
keypad(main_win, FALSE);
}