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 に答える