В мире Unix это было бы просто с помощью select(), но это не работает в Windows, поскольку stdin не является сокетом. Какой следующий самый простой вариант без создания дополнительных потоков и т. д.?
Я использую Visual C++, ориентированный на среду Win32.
до сих пор я пробовал:
- с помощью select (не работает, если ввод не является сокет)
- с помощью WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE)). - первое предложение Реми. Кажется, что это всегда возвращается немедленно, когда вы вызываете его, если стандартный ввод представляет собой консоль (другие сообщали о той же проблеме)
- использование перекрывающегося ввода-вывода и выполнение WaitForSingleObject (третье предложение Реми). В этом случае чтение всегда блокируется, когда ввод поступает с консоли — кажется, что stdin не поддерживает асинхронный ввод-вывод.
Подробнее здесь: https://stackoverflow.com/questions/199 ... th-timeout