【发布时间】:2009-04-01 22:35:35
【问题描述】:
在 Win32 C 中是否有一个 API 调用来刷新(转储)COM 端口接收缓冲区的内容?我只能找到刷新传输缓冲区的函数。
【问题讨论】:
在 Win32 C 中是否有一个 API 调用来刷新(转储)COM 端口接收缓冲区的内容?我只能找到刷新传输缓冲区的函数。
【问题讨论】:
`PurgeComm()' 可以丢弃 Tx 和 Rx 缓冲区中的一个或两个中的所有字符,并中止端口上的任何挂起的读取和/或写入操作。要对端口执行所有操作,可以这样说:
PurgeComm(hPort, PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR|PURGE_TXCLEAR)
您可能还想确保您已经处理或明确忽略了端口上的任何未决错误,可能是ClearCommError()。
ReadFile() 可用于通过将所有可用字节读入废物缓冲区来清空 Rx 缓冲区和 FIFO。请注意,您可能需要具备“非自然”知识才能正确调整该缓冲区的大小,或者重复 ReadFile() 调用直到它没有更多可说的内容。
但是,读取缓冲区以刷新它只有在您首先“合理地”设置COMMTIMEOUTS 时才有意义,否则读取将阻塞直到缓冲区被填满。
【讨论】:
刷新接收缓冲区没有意义,要从 com 端口接收缓冲区中获取数据,只需在 com 端口的句柄上调用 ReadFile
FlushFileBuffers 同步强制传输传输缓冲区中的数据
PurgeComm 清空缓冲区而不发送或接收(基本上是删除)
【讨论】: