Как без задержки определить, что кнопка нажата непрерывно? - PullRequest
0 голосов
/ 26 января 2019

Когда вы удерживаете клавишу в Windows, она нажимает ее один раз, затем происходит небольшая задержка, составляющая около 0,3 секунды, и только после этой задержки она начинает непрерывно нажимать ее.Примерно так: х (задержка 0,3 секунды) хххххххх.

Если я использую kbhit (), чтобы определить, нажата ли кнопка, она не обнаружит кнопку в эти 0,3 секунды задержки и, следовательно, не запустит нужный код в это время.

Как я могу это исправить?(Установка минимальной задержки (0,25 с) в элементах управления Windows мне не подходит.)

Я уже пробовал все возможные комбинации kbhit () и getch ().

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

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

Когда я нажимаю a в моем примере, он должен непрерывно, без перерыва на 0.3 секунды после первого раза, запускать ToDo ().Но это не так.

1 Ответ

0 голосов
/ 26 января 2019

kbhit не проверяет, нажата ли клавиша.Он только проверяет, есть ли нажатие клавиши в буфере, что означает что-то совершенно другое.

В Windows вам нужно использовать другие функции, такие как GetAsyncKeyState

...