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

How to detect without delay if a button is pressed continuously?

当你按住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()。但事实并非如此。

kbhit 不检查按键是否被按下。它只检查缓冲区中是否有击键,这意味着完全不同的东西。

在 Windows 中你需要使用其他函数,例如 GetAsyncKeyState