如果连续按下按钮,如何立即检测?

时间:2019-01-25 21:22:25

标签: c windows keyboard keystroke kbhit

在Windows上按住一个键时,它会按下一次,然后会有大约0.3秒的小延迟,只有在此延迟之后,它才会连续不断地按下它。 像这样: x(0.3秒延迟)xxxxxxxx。

如果我使用kbhit()来检测按钮是否被按下,则在0.3秒的延迟中它不会检测到按钮,因此在那段时间内未运行所需的代码。

我该如何解决? (对我来说,在Windows控件中将延迟设置为最小(0.25s)并不是我的选择。)

我已经尝试过kbhit()和getch()的所有可能组合。

while(TRUE){
   if (kbhit()) {
     button = getch();
   } else {
     button = 'x';
   }

   switch (button) {
     case 'a':
       ToDo();
       break;
   }
}

在我的示例中按a时,它应连续运行,第一次后没有0.3秒的中断,请运行ToDo()。但事实并非如此。

1 个答案:

答案 0 :(得分:1)

kbhit不检查是否按下了键。它仅检查缓冲区中是否有按键,这意味着完全不同。

在Windows中,您需要使用其他功能,例如GetAsyncKeyState