相关疑难解决方法(0)

为什么Boost.Asio不支持基于事件的界面?

我试图了解Boost.Asio,意图使用条件变量和Boost.Asio来实现信号系统.

我已经看到其他StackOverflow问题提升asio异步等待条件变量,boost :: asio异步条件boost条件变量问题,但这些问题/答案都没有令人满意地触及我的一个基本问题:是真的吗那和/或是否存在一个根本原因,Boost.Asio不适用于条件变量,或者与条件变量自然吻合?

我的想法是条件变量是使用操作系统级同步对象在内部实现的(例如,Windows上的boost :: thread :: condition_variable使用Windows操作系统信号量).因为,根据我目前的理解,boost :: asio :: io_service旨在封装操作系统级别的同步对象,因此条件变量似乎很自然.

确实,与文件操作和套接字操作不同,在操作系统级别通常从不存在与信号条件相关联的回调函数(我认为 - 我不确定这一点).但是,在Boost.Asio中实现这样的回调处理程序似乎很简单,只需要用户提供一个回调函数,该函数在条件变量发出信号时被调用 - 正如用户必须为其他函数提供完成处理程序例程一样. boost :: asio :: io_service服务.

例如(这只是一个快速思考,而不是一个完整的原型 - 它没有包含足够的参数来处理notify_one()与notify_all(),也没有说明服务如何知道何时退出,并且可能有其他明显的遗漏或缺陷):

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(),
               // …
Run Code Online (Sandbox Code Playgroud)

c++ boost event-handling boost-asio

7
推荐指数
2
解决办法
5367
查看次数

标签 统计

boost ×1

boost-asio ×1

c++ ×1

event-handling ×1