如果在设定的时间内没有键盘输入,则跳过需要输入

时间:2013-12-07 04:06:47

标签: c++ keyboard skip getch

我正在尝试获得键盘输入,但如果它在大约半秒内没有发生,我希望它继续循环的其余部分。我尝试使用kbhit();但它不会等待输入,它只是循环而不停止。这是有问题的循环:

    while(flags)
{
    gameing.updateDraw(0, 0);
    keyIn = getch();
    //Sleep(20);
    switch(keyIn)
    {
        case UP_ARROW:
                flags = gameing.updateDraw(-1, 1);
                break;
        case DOWN_ARROW:
                flags = gameing.updateDraw(1, 1);
                break;
        case WKEY:
                flags = gameing.updateDraw(-1, 2);
                break;
        case SKEY:
                flags = gameing.updateDraw(1, 2);
                break;
    }

非常感谢所有帮助。我试图避免使用alarm();

2 个答案:

答案 0 :(得分:0)

Sleep的组合调用表明这是一个使用<conio.h>功能的Windows程序,而不是使用curses的* nix程序。

使用<conio.h>,您可以使用kbhit功能检查是否有按键。

将其置于每次通话之间稍微休息一下的循环中。

更高级,您可以使用Windows API。它的等待函数可以在控制台句柄上等待指定的超时时间。

C ++标准库没有无缓冲的键盘输入功能。

答案 1 :(得分:0)

尝试使用ctime.h或chrono之类的东西来获得时差。然后做一些像

这样的事情
long lastTime=CurrentTime();
int input=0;
while(!(input=kbhit()) && CurrentTime()-lastTime < 20);
if(input)
    // do stuff with input
// do all the other stuff
lastTime=CurrentTime();

声明。我对kbhit和事情并不是特别熟悉,但基于谷歌的一点点,这似乎应该有效。此外,CurrentTime的实现取决于你,它不需要很长或任何东西,我只是为了简单起见而选择它。