如何在插件 [模块] 之间共享 boost::asio::io_service
How to share boost::asio::io_service across plugins [modules]
我想实现一个单线程应用程序,它也提供了一个插件/模块API。我的应用程序正在使用在类方法中实例化/初始化的静态io_service
。它可能被一些人称为单例。将其提供给插件实现者是个好主意吗?
boost::io_service& SomeClass::IOS()
{
static boost::io_service ios;
return ios;
}
首先,我想允许插件仅提供文件描述符,并且应用程序将它们包装为stream_descriptor
对象,但这会阻止boost提供io_object
特定功能;这就是我想向插件实现者提供静态io_service
并限制它们仅使用io_object
实例的原因。
我认为,如果您的架构基于boost::asio
,那么直接将io_service
公开为单例没有问题。
关于 ABI 的问题在每个C++插件架构中都是通用的, 而不是特定于boost::asio
. 因此,包装io_service
(如理查德所建议的那样)不是解决此问题的方法,而只是隐藏使用asio
的决定的一种方式。
顺便说一句:我想你想允许插件通过asio
来管理 I/O,并且主应用程序调度任务,所以你的包装器暴露post
和dispatch
是不够的(对插件没用),你应该提供例如套接字和其他 I/O 方法。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- 程序崩溃使用boost::asio
- boost::asio 无法捕获 SIGINT
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- std::boost::asio::p ost / dispatch 使用哪个io_context?