串行通信通过IOCP

是否可以使用IO完成端口的串行I / O? 根据通过C / C ++的Windows,它被暗示,这是可能的,并举例使用IOCP与物理文件显示工作与CreateFile,ReadFile,WriteFile等,但这实际上可以与串行通信工作 – 有人得到它工作?

我在网上找不到任何这样的例子,但我不能第一个尝试呢?

pty多路复用器

CRC反向工程师(Checksum from Machine / PC)

Linux:如何强制USB设备使用相同的ttyUSB号码

Windows / .NET的方式来监视/debugging串口?

如何使用Qextserialport在串行端口上写入

是的,使用I / O完成串行I / O的端口工作正常。 有一些设置工作需要为适合于IOCP的串行端口创建文件句柄。 但一旦完成设置,就可以像使用常规文件句柄和套接字句柄一样执行异步ReadFile()和WriteFile()操作。

设置基本上是:

使用CreateFile()作为dwFlagsAndAttributes参数传入FILE_FLAG_OVERLAPPED值,打开串口。

根据需要使用GetCommState()和SetCommState()修改串口状态。 这样做就像不使用IOCP时那样做。

使用GetCommTimeouts()和SetCommTimeouts()来关闭读取操作的总超时时间,因为对于异步操作超时是没有意义的。 (您将显式调用CancelIO()来取消读取操作。)关闭total-timeouts是通过将COMMTIMEOUTS结构的ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant字段设置为零来完成的。

现在,您可以像使用常规文件句柄和套接字句柄一样使用IOCP句柄。 即使用CreateIoCompletionPort()将句柄附加到完成端口,使用OVERLAPPED结构使用ReadFile()或WriteFile()启动I / O操作,使用GetQueuedCompletionStatus()函数从完成端口中取出已完成,失败或取消的操作。

还可以使用WaitCommEvent()函数异步检索其他串行端口特定事件。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....