EV_RXCHAR 事件何时以及多久触发一次(来自 WaitCommEvent)?
When and how often does the EV_RXCHAR event fire (from WaitCommEvent)?
我一直在研究 .NET SerialPort
和 SerialStream
类 的 reference sources,发现它们触发了 DataReceived
事件等待 WaitCommEvent()
。
当串口接收到一定量的数据时,该事件通常只触发一次。通常当事件触发时,传输已完成:我只需要读取一次即可获取所有数据。但是,有时事件在接收到所有数据之前就结束了。在这种情况下,该事件将第二次触发,然后我可以读取其余数据。
这让我想到了一个问题:EV_RXCHAR
事件究竟在什么时候触发?接收到第一个字节后立即?收到数据后,过了一段时间还没有收到数据?
在 Communications Events 的 MSDN 页面中有更详细的解释:
For example, if you specify the EV_RXCHAR event as a wait-satisfying
event, a call to WaitCommEvent will be satisfied if there are
characters in the driver's input buffer that have arrived since the
last call to WaitCommEvent or SetCommMask.
所以 EV_RXCHAR
将在一个或多个字符到达时触发。如果您不读取这些字节而是立即再次调用 WaitCommEvent
,它不会再次触发,直到更多(新)字符到达。
我一直在研究 .NET SerialPort
和 SerialStream
类 的 reference sources,发现它们触发了 DataReceived
事件等待 WaitCommEvent()
。
当串口接收到一定量的数据时,该事件通常只触发一次。通常当事件触发时,传输已完成:我只需要读取一次即可获取所有数据。但是,有时事件在接收到所有数据之前就结束了。在这种情况下,该事件将第二次触发,然后我可以读取其余数据。
这让我想到了一个问题:EV_RXCHAR
事件究竟在什么时候触发?接收到第一个字节后立即?收到数据后,过了一段时间还没有收到数据?
在 Communications Events 的 MSDN 页面中有更详细的解释:
For example, if you specify the EV_RXCHAR event as a wait-satisfying event, a call to WaitCommEvent will be satisfied if there are characters in the driver's input buffer that have arrived since the last call to WaitCommEvent or SetCommMask.
所以 EV_RXCHAR
将在一个或多个字符到达时触发。如果您不读取这些字节而是立即再次调用 WaitCommEvent
,它不会再次触发,直到更多(新)字符到达。