【发布时间】:2019-01-25 21:22:24
【问题描述】:
当您在 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 秒的中断。但事实并非如此。
【问题讨论】:
-
旁白:有两个延迟值:第一个重复的较长,后续重复的较短。 AFAIK 第一次按键检测没有延迟。
标签: c windows keyboard keystroke kbhit