通讯活动

【勇芳软件工作室】汉化HomePreviousNext

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

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

含义
EV_BREAK输入时检测到中断。
EV_CTSCTS(清除发送)信号改变状态。
EV_DSRDSR(数据设置就绪)信号改变状态。
EV_ERR发生线路状态错误。线路状态错误是CE_FRAME,CE_OVERRUN和CE_RXPARITY。
EV_RING检测到环形指示器。
EV_RLSDRLSD(接收线路信号检测)信号改变状态。
EV_RXCHAR收到一个字符并放在输入缓冲区中。
EV_RXFLAG事件字符被接收并放置在输入缓冲器中。事件字符在设备的DCB结构中指定,该结构通过使用SetCommState功能应用于串行端口。
EV_TXEMPTY输出缓冲区中的最后一个字符已发送。

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

当发生事件屏蔽中指定的事件之一时,该进程完成等待操作,并设置事件掩码变量以指示检测到的事件的类型。如果在等待待处理该资源的情况下调用了SetCommMask通信资源,WaitCommEvent将返回错误。

WaitCommEvent功能可以检测自上次调用SetCommMaskWaitCommEvent以来发生的事件。例如,如果将EV_RXCHAR事件指定为等待满足的事件,则如果驱动程序的输入缓冲区中有自WaitCommEventSetCommMask上次调用以来已经到达的字符,则将调用WaitCommEvent.因此,给定以下伪代码,

while(we_care){

WaitCommEvent

T1://读取字节

//处理它们

T2:}

...在T1和T2之间接收的任何字符将满足下一次调用WaitCommEvent.

当监视信号(CTS,DSR等)改变状态时发生的事件,WaitCommEvent报告更改,但不报告当前状态。要查询CTS(清除发送),DSR(数据设置就绪),RLSD(接收线路信号检测)和振铃指示符信号的当前状态,过程可以使用GetCommModemStatus功能。