清除键盘缓冲区

时间:2014-06-23 12:27:49

标签: c++ linux buffer ncurses getch

在函数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:我发现了一种解决方法,但我仍在寻找清除缓冲区的解决方案。

2 个答案:

答案 0 :(得分:3)

答案 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);
}