刷新通信句柄接收缓冲区?

时间:2009-04-01 22:35:35

标签: c windows winapi

在Win32 C中是否有一个API调用来刷新(转储)COM端口接收缓冲区的内容?我只能找到刷新发送缓冲区的函数。

2 个答案:

答案 0 :(得分:8)

`PurgeComm()'可以删除Tx和Rx缓冲区中的任何一个或两个中的所有字符,并中止端口上任何挂起的读取和/或写入操作。要对一个端口做所有事情,请说:

PurgeComm(hPort, PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR|PURGE_TXCLEAR) 

您可能还需要确保已经处理或明确忽略了端口上的任何待处理错误,可能是ClearCommError()

ReadFile()可用于通过将所有可用字节读入废液缓冲区来清空Rx缓冲区和FIFO。请注意,您可能需要具有“不自然”的知识才能正确调整缓冲区的大小,或者重复ReadFile()调用,直到无法再说。

然而,只有先将COMMTIMEOUTS设置为“理性”,或者读取将阻塞直到缓冲区被填满,读取缓冲区才能刷新它才有意义。

答案 1 :(得分:0)

刷新接收缓冲区没有意义,从com端口接收缓冲区中获取数据只需在com端口的句柄上调用ReadFile

FlushFileBuffers同步强制传输缓冲区中的数据传输

PurgeComm清空缓冲区而不进行传输或接收(基本上是删除)