我正在尝试获得键盘输入,但如果它在大约半秒内没有发生,我希望它继续循环的其余部分。我尝试使用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();
答案 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的实现取决于你,它不需要很长或任何东西,我只是为了简单起见而选择它。