通信事件

进程可以监视通信资源中发生的一组事件。 例如,应用程序可以使用事件监视来确定 CTS(清除到发送)和 DSR(数据集就绪)何时发出更改状态。

进程可以使用 SetCommMask 函数创建事件掩码来监视给定通信资源上的事件。 若要确定通信资源的当前事件掩码,进程可以使用 GetCommMask 函数。 以下值指定可以监视的事件。

含义
EV_BREAK 在输入时检测到中断。
EV_CTS CTS(清除到发送)信号已更改状态。
EV_DSR DSR(数据集就绪)信号已更改状态。
EV_ERR 发生行状态错误。 行状态错误是 CE_FRAMECE_OVERRUNCE_RXPARITY
EV_RING 检测到环指示器。
EV_RLSD RLSD (receive-line-signal-detect) 信号已更改状态。
EV_RXCHAR 字符已接收并放置在输入缓冲区中。
EV_RXFLAG 事件字符已接收并放置在输入缓冲区中。 事件字符在设备的 DCB 结构中指定,该结构将使用 SetCommState 函数应用于串行端口。
EV_TXEMPTY 输出缓冲区中的最后一个字符已发送。

 

指定一组事件后,进程使用 WaitCommEvent 函数等待其中一个事件发生。 WaitCommEvent 可以同步使用,也可以用作重叠操作。 有关将函数作为重叠操作执行的其他信息,请参阅同步

当发生事件掩码中指定的某个事件时,进程将完成等待操作,并设置事件掩码变量以指示检测到的事件类型。 如果在等待该资源的等待时为通信资源调用 SetCommMaskWaitCommEvent 将返回错误。

WaitCommEvent 函数检测自上次调用 SetCommMaskWaitCommEvent 以来发生的事件。 例如,如果将 EV_RXCHAR 事件指定为满足等待的事件,则如果驱动程序的输入缓冲区中存在自上次调用 WaitCommEventSetCommMask 以来到达的字符,则满足对 WaitCommEvent 的调用。 因此,鉴于以下伪代码,在 T1 和 T2 之间接收的任何字符都将满足对 WaitCommEvent 的下一次调用。

while (!bFinished) 
{ 
    WaitCommEvent(args)
 
T1: // Read bytes 
    // Process bytes 

T2: 
}

监视信号(CTS、DSR 等)更改状态时发生的事件时,WaitCommEvent 将报告更改,但不会报告当前状态。 若要查询 CTS(清除到发送)、DSR(数据集就绪)、RLSD(接收线信号检测)和环指示器信号的当前状态,进程可以使用 GetCommModemStatus 函数。