Функции ввода Си++ вообще малопригодны для подобных выкрутасов.
sleep тут вообще не в тему.
Почитайте про следующие функции
select или poll для мониторинга событий на файловом дескрипторе
clock_gettime для измерения времени
Основная идея интерактивных программ типа игр и т.п.
Есть постоянный цикл отрисовки игрового мира
Есть получение информации о событиях (нажатие клавиш и т.п.). Это можно сделать как в основном потоке (как раз при помощи select или poll), так и в дополнительных.
Для создания разного рода пауз используют вычисление разницы между двумя точками времени а не блокирующие поток выполнения функции типа sleep
D PМудрец (18454)
1 год назад
Вот тут пример работы с poll для считывания стандартного ввода.
В вашем случае таймаут вообще не нужен, надо просто посмотреть, появилась ли информация, которую можно считывать, или нет.
А вообще, на мой взгляд, лучше использовать для динамических игр специально предназначенные для этого вещи, типа SDL. Потому что, по хорошему, для игр нужна обработка низкоуровневого ввода. Во времена игр DOS можно было просто напрямую работать с клавиатурой, но сейчас уже такой фокус просто так не пройдет.