进程可以监视通信资源中发生的一组事件。例如,应用程序可以使用事件监视来确定CTS(清除发送)和DSR(数据集就绪)信号何时改变状态。
进程可以通过使用SetCommMask函数来创建事件掩码来监视给定通信资源上的事件。要确定通信资源的当前事件掩码,进程可以使用GetCommMask函数。以下值指定可以监视的事件。
值 | 含义 |
EV_BREAK | 输入时检测到中断。 |
EV_CTS | CTS(清除发送)信号改变状态。 |
EV_DSR | DSR(数据设置就绪)信号改变状态。 |
EV_ERR | 发生线路状态错误。线路状态错误是CE_FRAME,CE_OVERRUN和CE_RXPARITY。 |
EV_RING | 检测到环形指示器。 |
EV_RLSD | RLSD(接收线路信号检测)信号改变状态。 |
EV_RXCHAR | 收到一个字符并放在输入缓冲区中。 |
EV_RXFLAG | 事件字符被接收并放置在输入缓冲器中。事件字符在设备的DCB结构中指定,该结构通过使用SetCommState功能应用于串行端口。 |
EV_TXEMPTY | 输出缓冲区中的最后一个字符已发送。 |
指定一组事件后,进程使用WaitCommEvent函数等待发生其中一个事件。WaitCommEvent可以同步使用或重叠操作。有关执行功能作为重叠操作的其他信息,请参阅同步.
当发生事件屏蔽中指定的事件之一时,该进程完成等待操作,并设置事件掩码变量以指示检测到的事件的类型。如果在等待待处理该资源的情况下调用了SetCommMask通信资源,WaitCommEvent将返回错误。
WaitCommEvent功能可以检测自上次调用SetCommMask或WaitCommEvent以来发生的事件。例如,如果将EV_RXCHAR事件指定为等待满足的事件,则如果驱动程序的输入缓冲区中有自WaitCommEvent或SetCommMask上次调用以来已经到达的字符,则将调用WaitCommEvent.因此,给定以下伪代码,
while(we_care){
WaitCommEvent
T1://读取字节
//处理它们
T2:}
...在T1和T2之间接收的任何字符将满足下一次调用WaitCommEvent.
当监视信号(CTS,DSR等)改变状态时发生的事件,WaitCommEvent报告更改,但不报告当前状态。要查询CTS(清除发送),DSR(数据设置就绪),RLSD(接收线路信号检测)和振铃指示符信号的当前状态,过程可以使用GetCommModemStatus功能。