2013-12-07 6 views
0

Я пытаюсь получить ввод с клавиатуры, но если этого не произойдет примерно через полсекунды, я хочу, чтобы он продолжался до конца петля. Я попытался использовать 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; 
    } 

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

ответ

0

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

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

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

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

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

+0

Спасибо за помощь. Я посчитал хороший способ сделать это с kbhit while (flags) { keyIn = 0; gameing.updateDraw (0, 0); Сон (100); if (_kbhit()) Слишком много работы по сравнению с этим, и что касается ответа Альфа, я интерпретировал ваш ответ как просто используя kbhit вместо getch(), а kbhit возвращает только тот ключ, который был нажат, а не что нажата клавиша. – user3076703

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 зависит от вас, она не должна быть длинной или любой, я просто выбрал это для простоты.

 Смежные вопросы

  • Нет связанных вопросов^_^