2

curses ライブラリを使用しています。Escape キーが押されるまでアプリケーションを実行し続けたい。次のキー入力をブロックするべきではありません。

私の作業コードは次のとおりです。これは、key=getch(); でユーザー入力を待ちます。誰かがエスケープキーを押すまで、これを非ブロックにしたい。キーボード入力を待つべきではありません。

while (true)
{
    key=getch();
    if (key==ESCAPE)
    {
        break;
    }
    //else
    //{
        //execute something 
    //}
}//while end
4

4 に答える 4

2

timeoutループの前に次のように関数を呼び出すことができます。

timeout(0);

その後、getchブロックされなくなります。

関数の説明は次のとおりです。

void timeout(int delay);
void wtimeout(WINDOW *win, int delay);

timeout および wtimeout ルーチンは、特定のウィンドウの読み取りをブロックするか、ブロックしないかを設定します。delay が負の場合、ブロッキング読み取りが使用されます (つまり、入力を無期限に待機します)。delay が 0 の場合、ノンブロッキング読み取りが使用されます (つまり、待機中の入力がない場合、読み取りは ERR を返します)。delay が正の場合、delay ミリ秒の間ブロックを読み取り、まだ入力がない場合は ERR を返します。したがって、これらのルーチンは nodelay と同じ機能に加えて、遅延ミリ秒 (遅延が正の場合) だけブロックできる追加機能を提供します。

于 2012-06-01T08:27:29.817 に答える
0

ご回答ありがとうございます。kbhit()を使用してこれを解決しました

于 2012-06-01T11:00:04.953 に答える