c - 如何及时检测按钮是否被连续按下?

标签 c windows keyboard keystroke kbhit

当您在 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 秒的中断。但事实并非如此。

最佳答案

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

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

关于c - 如何及时检测按钮是否被连续按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372943/

相关文章:

c - 读取 .txt 文件并获取单词/整数作为字符串

c - 名称 "scanf"和说明符 "%g"的起源是什么?

windows - ^M 在 CodeBlocks 中编辑时在行尾(我认为)

用于在 Windows 控制台中运行的游戏的 C++ 控件

c# - 检测按键按下

c++ - 为什么我得不到虚拟打印机的上下文?

c - 如何在 Embarcadero 控制台应用程序中获得更大的窗口

c++ - 在内核空间调用 NtQuerySystemInformation

windows - 批处理文件循环遍历文本文件的内容,创建变量并移动具有部分名称的文件

iphone - ios 上的 Ionic3 键盘问题