5

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

4

2 回答 2

8

为此目的有一个功能:flushinp()

http://pubs.opengroup.org/onlinepubs/007908799/xcurses/flushinp.html

于 2014-06-23T22:42:05.910 回答
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);
}
于 2014-06-23T13:12:17.103 回答