boost asio serial_port_service和serial_port有什么区别
What is the difference of boost asio serial_port_service and serial_port
我将实现一个(希望)强大的异步串行rs232数据传输(通过USB)-适用于windows和linux,尤其是名为beagle bone black的漂亮嵌入式系统。
最后,我只想能够(兼容地)使用强大的截止日期超时、cancel()reset()等与rs232对话,以避免在例如tx或rx线路意外断开时崩溃/挂起。当然,我可以简单地复制/粘贴/采用现有的示例。但我也想变得更开明;-)
我决定使用boost:asio::serial_port。现在,在阅读文档时,我对这两个类感到困惑(第三个类是typedefserial_port):
serial_port_service-串行端口的默认服务实现。
class serial_port_service : public io_service::service
basic_serial_port-提供串行端口功能。
template< typename SerialPortService = serial_port_service>
class basic_serial_port :
public basic_io_object< SerialPortService >,
public serial_port_base
因此,我看到,我需要一个boost::asio::io_service
来构造boost::asio::serial_port
或serial_port_service
。我想我已经理解了asio如何完成工作的基本方法,比如这个例子中的bespoken。
OK serial_port_service
派生自io_service,它的ctor采用io_service
,它的接口也提供了basic_serial_port
的memberfunc。
对我来说,它看起来像是一个io_service,它还实现了一个basic_serial_port——两个类都有的原因是什么?什么时候用一个,什么时候用另一个?不确定可能的用例,以及这个serial_port
typedef如何。也许(很明显)我错过了什么——有人能给我更多的光吗?
通常,应用程序应该使用I/O对象。在这种情况下,这将是boost::asio::serial_port
。
不同的类用于分离职责和抽象。名称的相似性可能会让人感到困惑,因此文档在命名时非常小心。文件说明:
类
io_service
实现了一组可扩展的、类型安全的、多态的I/O服务,按服务类型进行索引。在使用诸如套接字、解析器和定时器之类的I/O对象之前,必须初始化类io_service
的对象。这些I/O对象通过具有接受io_service&
参数的构造函数来区分。I/O服务的存在是为了代表I/O对象管理到操作系统的逻辑接口。特别是,存在跨一类I/O对象共享的资源。例如,定时器可以按照单个定时器队列来实现。I/O服务管理这些共享资源。
在串行端口的上下文中对此进行解释:
io_service
提供事件处理循环并管理I/O服务,例如serial_port_service
serial_port
是一个I/O对象,它提供了执行串行端口相关操作的接口。实施非常基本:- 确定如何将信息返回给调用者:如果发生错误则抛出、填充
std::future
、挂起协程等 - 将实际工作推迟到其I/O服务
serial_port_service
- 提供RAII语义。当
serial_port
被销毁时,它将取消未完成的异步操作并关闭serial_port
- 确定如何将信息返回给调用者:如果发生错误则抛出、填充
serial_port_service
是一种I/O服务:- 它提供了一个抽象并实现了特定于平台的API
- 它在使用相同CCD_ 21的CCD_ 20之间共享。当用
io_service
创建serial_port
时,serial_port
将使用注册到io_service
的现有serial_port_service
,或者用io_service
创建并注册新的serial_port_service
- 它充当I/O对象的
implementation
的工厂。对于serial_port
,这可能是一个基本的文件描述符或句柄
- 为什么 Serial.println(<char[]>);返回随机字符?
- Port pthread_cond_broadcast to std::atomic
- Arduino Uno - serial.read to a struct of bits
- Arduino - 如何从 serial.read() 馈送结构?
- Arduino在通过Serial读取utf8时表现奇怪
- 如何在 Arduino 延迟期间在 void loop() 中使用 serial.available()?
- Serial.print in arduino 不写变量
- 如何发送RAW JSON PORT请求C
- libtensorflow_core.a缺少符号(tensorflow :: port :: initmain(char
- Serial.Read() code
- Windows 和 Linux 中的 USB Serial 之间的区别
- 在Arduino Radiohead中使用serial.read()与const char *
- 使用 Serial.Read 输入在 Arduino 上设置 LCD 光标
- Arduino Serial在哪里创建
- "port" Visual Studio C++项目以在 Linux 上编译的最简单方法是什么?
- "Serial transmit complete" -中断RS485 [小猎犬骨黑 - 埃]
- Arduino serial.available奇怪的错误
- C++代码Firebreath,Serial Port,JavaScript接口
- Arduino Serial 库是否有跨平台"port"?
- serial port write c++