是否可以使用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()函数异步检索其他串行端口特定事件。