Как и в другом ответе, вы можете использовать потоки, но даже тогда у вас могут возникнуть проблемы (при использовании метода потоков), если вы также не исследуете перекрывающийся ввод-вывод.
Обычно я использую перекрывающийся ввод-вывод с последовательными портами, а не stdin, где обычно требуется «прочитать символ, если он готов», и где неблокирующий ввод-вывод - обычный способ работы. Вы должны быть в состоянии приспособить показанную технику здесь . Однако, если бы я писал приложение, которое управлялось клавиатурой (вместо того, чтобы просто управлять, скажем, файлом, перенаправленным на стандартный ввод), я бы отказался от StdIN и использовал модуль типа CRT. Итак, если вы не против отказаться от StdIn и просто хотите иметь модель ввода на основе клавиатуры, вы можете взглянуть на консольные API и отказаться от очень ограничивающих возможностей StdIn. Для примера функции "kbhit", которая использует API консоли Win32, см. здесь .