Почему Boost.Asio не поддерживает интерфейс на основе событий?

Я пытаюсь понять Boost.Asio с целью потенциальной реализации системы сигнализации с использованием условных переменных в сочетании с Boost.Asio.

Я видел другие вопросы StackOverflowboost asio асинхронно ожидает переменную условия,boost :: asio асинхронное условие, а такжепроблема с бустом, но ни один из этих вопросов / ответов удовлетворительно не затронул существенный у меня вопрос:Правда ли, что и / или есть фундаментальная причина, по которой Boost.Asio не применим или не соответствует переменным состояния?

Я думаю, что условные переменные реализуются внутренне с использованием объектов синхронизации на уровне операционной системы (например, boost :: thread :: condition_variable в Windows использует семафор ОС Windows). Поскольку, насколько я понимаю, boost :: asio :: io_service предназначен для инкапсуляции объектов синхронизации на уровне ОС, поэтому условные переменные выглядят естественным образом.

Это правда, что в отличие от файловых операций и операций с сокетами, наоперационная система уровень, связанный с сигнализируемымсостояние (Я думаю - я не уверен в этом). Тем не менее, казалось бы, достаточно просто реализовать такой обработчик обратного вызова в Boost.Asio, просто потребовав от пользователя предоставить функцию обратного вызова, которая должна вызываться, когда передается переменная условия - так же, как пользователи должны предоставить подпрограмму обработчика завершения для других услуги boost :: asio :: io_service.

Например (это просто быстрая мысль, а не полный прототип - он не содержит достаточных параметров для работы с notify_one () и notify_all (), неt указывает, как служба знает, когда выходить, и, вероятно, имеет другие явные упущения или недостатки):

void condition_handler_function() {}
boost::asio::io_service service;
boost::mutex mut;
boost::condition_variable cond;

// The following class is **made up by me** - would such a class be a good idea?
boost::asio::io_service::condition_service
             condserv(service, cond, mut, condition_handler_function); 

condserv.async_wait_on_signal();

service.run(); // when condition variable is signaled by notify_one(),
               // 'handler_function()' would be called


// ... in some other thread, later:
cond.notify_one(); // This would trigger 'handler_function()'
                   // in this theoretical code

Возможно, если бы я попытался заполнить недостающие детали, отмеченные над фрагментом кода, мне стало бы ясно, что это не может работать в чистом виде. Однако это усилие нетривиально.

Поэтому я хотел бы разместить вопрос здесь. Есть ли веская причина, почему условные переменные не поддерживаются Boost.Asio?

ДОПОЛНЕНИЕ

Я изменил название поста на ссылку "Событийный интерфейс »С ТаннерОтвет s ниже пояснил мне, что это действительно интерфейс на основе событий, о котором я спрашиваю (на самом деле это не условные переменные).

Ответы на вопрос(2)

Ваш ответ на вопрос