Всякий раз, когда у вас есть асинхронные события, у вас должен быть цикл обработки событий.Это не обязательно должно быть системное значение по умолчанию, например, цикл сообщений Windows.Вы можете создать свой собственный.Но вы должны его использовать.
Весь смысл программирования, основанного на событиях, заключается в том, что вы не используете свою обработку кода для работы с четко определенными функциональными фрагментами, основанными на этих асинхронных событиях.Без цикла обработки событий вы обрекаете себя на чередование кода, который получает входные данные и производит выходные данные на основе плохо определенных «состояний», которые являются просто фрагментами процедурного кода.
Без четко определенного разделения состояний с использованием событияна основе дизайна, код быстро становится неуправляемым.Поскольку код делает паузы внутри процедур для выполнения входных задач, у вас есть время жизни объектов, которое не будет охватывать целые области действия процедур, и вы начнете писать if (nullptr == xx) в различных местах, которые обращаются к объектам, созданным или уничтоженным на основе событий.Диспетчеризация становится комбинаторно сложной, потому что в каждой точке ввода ожидаются разные события и нет абстракции.
Однако, просто используя цикл обработки событий и диспетчеризацию для конечных автоматов, вы уменьшили сложность обработки до базового управления обработчиками (O(n) обработчики против операторов ветвей O (mn) с n типами событий и m состояниями).Вы отделяете обработку, но все еще допускаете изменение функциональности в зависимости от состояния.Но теперь эти состояния четко определены с использованием классов состояний.И новые состояния могут быть добавлены, если требования продукта меняются.
Я просто говорю, перестаньте пытаться избежать цикла событий.Это программный шаблон по очень важным причинам, все из которых связаны с созданием профессионального, многократно используемого, масштабируемого кода.Используйте Boost.ASIO или какой-либо другой фреймворк для кроссплатформенных возможностей.Не становитесь привычкой делать это неправильно только потому, что думаете, что это будет меньше усилий.В конце концов, даже если это не профессиональный проект, который требует длительного сопровождения, вы хотите попрактиковаться в том, чтобы сделать свой код профессиональным, чтобы вы могли что-то сделать со своими навыками.