_kbhit позволяет проверить, была ли нажата клавиша. В отличие от _getch , он возвращается немедленно и не блокируется, если во входном буфере нет данных для чтения.
Обе функции являются спецификациями Microsoft c для C Runtime (CRT), и не являются частью Standard C или C ++.
Ответы на второстепенные вопросы:
Я обеспокоен тем, что моя программа даже не сможет обнаружить какой-либо ввод из-за того, что спящая функция приостанавливает выполнение.
Консольный ввод обрабатывается ОС и буферизуется для вас, пока вы не прослушиваете ввод. Чтение потока из консоли ввода не должно быть активным в момент поступления ввода. Он всегда будет в состоянии наблюдать ввод из буфера, когда он проснется, чтобы проверить.
Если это так, какой будет лучший подход к этому?
Этого не произойдет. И все же, есть лучшие варианты для реализации требований. Поскольку в настоящее время это реализовано, приложение не сможет отвечать на входные данные до истечения времени ожидания Sleep
. Несмотря на надежность, это приводит к заметной задержке между нажатием клавиши пользователем и реагированием на него приложения.
Существуют способы решения этой проблемы. Как API Windows, так и язык программирования C ++ предлагают сервисы, позволяющие реализовать операцию ожидания, которая возвращается, как только выполняется одно из нескольких условий (например, ожидание нажатия клавиши или истечения времени ожидания).
Решения задействованы и требуют глубокого знакомства с Windows API или C ++ - в идеале и тем, и другим - для усвоения. Я сомневаюсь, что вам было бы полезно (чтобы попытаться) выучить их на этом этапе. Продолжите свое путешествие и вернитесь к этому позже, наслаждаясь комфортом, зная, что это можно решить.