0

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

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

我怎样才能解决这个问题?(在 Windows 控件中将延迟设置为最小(0.25 秒)对我来说是没有选择的。)

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

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

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

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

4

1 回答 1

1

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

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

于 2019-01-25T21:49:03.627 回答