while (true)
wait_for_events
handle_events
По сути, неблокирующий цикл обработки событий использует устройство, которое позволяет ожидать нескольких событий одновременно (select
/ poll
в UNIX, WaitForMultipleEvents
в Windows, epoll
в Linux kqueue
в FreeBSD и т. Д.). В каждой итерации основного цикла события (файловые дескрипторы, таймеры и т. Д.) Регистрируются в каком-то дескрипторе. Затем вызывается функция, которая ожидает события (например, select
). Обычно это возвращает все события, которые произошли во время вызова этой функции. Наконец, цикл обрабатывает эти события - как правило, вызывая обратные вызовы, связанные с событиями.
Подробности смотрите в реализации libevent или некоторых циклов событий инструментария GUI - GTK + или Qt.