微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

串行通信通过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()函数异步检索其他串行端口特定事件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐