@asurkis

Как вводить данные из консоли, не блокируя поток?

Есть графическое приложение на C++, у него есть главный цикл (считывание и обработка событий, отрисовка графики через OpenGL и т.п.), но также требуется вводить данные из консоли
Можно ли делать это, не создавая дополнительный поток?
При этом текущий поток не должен "зависать" и ждать окончания ввода, так как, как уже указано, в нём происходит обработка GUI
  • Вопрос задан
  • 566 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Лучше сделать отдельный поток. Иначе вам придется велосипедить менеджер задач из ОС.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@polar_winter
Поток(stream) ввода - то же файловой дескриптор только его номер заранее известен. Используйте асинхронное чтение (асинхронный ввод - вывод), например системные вызовы select, poll, aio_read, boost::asio, итд итп. Как заметил Арянское радио - альтернативный подход с блокирующими вызовами и потоками(thread) - более распространён, и легче воспринимаем большинством программистов, чем горождение машины состояний для обработки конкурентных задач в одном потоке. Но если фреймворк, такой как Qt же сделал это за вас(создал loop для обработки событий, ...), то работа в событийной - ориентированной модели будет ещё проще нежели с потоками. Например асинхронное чтение завязанное на таймер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы