EV_RXCHAR事件何时以及多久发生一次(来自WaitCommEvent)?

时间:2015-06-03 19:26:53

标签: c# .net winapi events serial-port

我一直在挖掘reference sources for .NET SerialPortSerialStream类,并发现他们通过等待发起他们的DataReceived事件WaitCommEvent()

当串口收到一些数据时,事件通常只触发一次。通常当事件触发时,传输已完成:我只需读取一次即可获取所有数据。但是,有时事件在收到所有数据之前结束。在这种情况下,事件将再次触发,然后我可以读取其余的数据。

这引出了一个问题:EV_RXCHAR事件到底发生了什么?收到第一个数据字节后立即?收到数据并且已经过了一段时间而没有再收到数据?

1 个答案:

答案 0 :(得分:1)

Communications Events上的MSDN页面中对此进行了详细说明:

  

例如,如果将EV_RXCHAR事件指定为等待满足   如果存在,将满足对WaitCommEvent的调用   驱动程序输入缓冲区中的字符自从到达以来已到达   最后调用WaitCommEvent或SetCommMask。

当一个或多个角色到达时,class B:public A { int z; public : B(const int &x,const int &y,const int &thez):A(x,y), z(thez) { //modifications to z x +=z; y +=z; } }; 将会触发。如果您没有读取这些字节,而是立即再次呼叫EV_RXCHAR,则在更多(新)字符到达之前,它不会再次触发。