Если в течение заданного промежутка времени нет ввода с клавиатуры, пропустите ввод

Я пытаюсь получить ввод с клавиатуры, но если это не произойдет примерно через полсекунды, я хочу, чтобы оно продолжалось до конца цикла. Я пытался использовать kbhit (); но он не будет ждать ввода, он просто зацикливается без остановки. Это рассматриваемый цикл:

    while(flags)
{
gameing.updateDraw(0, 0);
keyIn = getch();
//Sleep(20);
switch(keyIn)
{
case UP_ARROW:
flags = gameing.updateDraw(-1, 1);
break;
case DOWN_ARROW:
flags = gameing.updateDraw(1, 1);
break;
case WKEY:
flags = gameing.updateDraw(-1, 2);
break;
case SKEY:
flags = gameing.updateDraw(1, 2);
break;
}

Вся помощь будет принята с благодарностью. Я пытаюсь избежать использования будильника ();

0

Решение

Комментированный вызов Sleep указывает, что это программа Windows, использующая <conio.h> функциональность, а не программа * nix, использующая проклятия.

С <conio.h> Вы можете использовать kbhit функция, чтобы проверить, есть ли нажатие клавиши.

Поместите это в цикл, который спит немного между каждым вызовом.

Более продвинутый вы можете использовать Windows API. Его функции ожидания могут ожидать на дескрипторе консоли с заданным временем ожидания.

Стандартная библиотека C ++ не имеет небуферизованной функциональности ввода с клавиатуры.

0

Другие решения

Попробуйте использовать что-то вроде ctime.h или chrono, чтобы получить разницу во времени. Тогда сделай что-нибудь вроде

long lastTime=CurrentTime();
int input=0;
while(!(input=kbhit()) && CurrentTime()-lastTime < 20);
if(input)
// do stuff with input
// do all the other stuff
lastTime=CurrentTime();

Отказ от ответственности. Я не особенно знаком с kbhit и другими вещами, но, основываясь на небольшом поиске, кажется, что это должно сработать. Также реализация CurrentTime зависит от вас, она не должна быть длинной или чем-то еще, я просто выбрал это для простоты.

0

По вопросам рекламы [email protected]