WaitCommEvent功能等待指定通信设备发生事件。由该函数监视的事件集包含在与设备句柄相关联的事件掩码中。
BOOL WaitCommEvent(
HANDLE 【HFILE】, | //通讯设备的句柄 |
LPDWORD 【lpEvtMask】, | //发生事件变量的地址 |
LPOVERLAPPED 【lpOverlapped的】, | //重叠结构的地址 |
); |
参数
【HFILE】
识别通信设备。CreateFile函数返回此句柄。
【lpEvtMask】
指向一个32位变量,接收一个指示发生的事件类型的掩码。如果发生错误,则该值为零;否则,它是以下值之一:
值 | 含义 |
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 | 输出缓冲区中的最后一个字符已发送。 |
【lpOverlapped的】
指向OVERLAPPED结构。如果使用FILE_FLAG_OVERLAPPED打开【HFILE】,则此结构是必需的。
如果使用FILE_FLAG_OVERLAPPED打开【HFILE】,则【lpOverlapped的】参数不能为NULL。它必须指向一个有效的OVERLAPPED结构。如果使用FILE_FLAG_OVERLAPPED打开【HFILE】,并且【lpOverlapped的】为NULL,则该函数可能会错误地报告操作是否完成。
如果使用FILE_FLAG_OVERLAPPED打开hFile,并且【lpOverlapped的】不为NULL,则WaitCommEvent作为重叠操作执行。在这种情况下,OVERLAPPED结构必须包含手动重置事件对象的句柄(使用CreateEvent函数创建)。
如果【HFILE】句柄未使用FILE_FLAG_OVERLAPPED打开,WaitCommEvent不会返回,直到指定的事件之一或发生错误。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
WaitCommEvent功能监视指定通信资源的一组事件。要设置和查询通信资源的当前事件掩码,请使用SetCommMask和GetCommMask函数。
如果重叠操作无法立即完成,则函数返回FALSE,GetLastError函数返回ERROR_IO_PENDING,表示操作在后台执行。发生这种情况时,系统将在WaitCommEvent返回之前将OVERLAPPED结构的活动成员设置为未发信号的状态,然后在其中一个指定的事件或错误发生时将其设置为信号状态。调用进程可以使用等待功能之一来确定事件对象的状态,然后使用GetOverlappedResult函数确定WaitCommEvent操作的结果。GetOverlappedResult报告操作的成功或失败,并且【lpEvtMask】参数指向的变量被设置为指示发生的事件。
如果进程尝试通过使用SetCommMask函数来更改设备句柄的事件掩码,而WaitCommEvent操作正在进行中,WaitCommEvent将立即返回。【lpEvtMask】参数指向的变量设置为零。
也可以看看
CreateFile, DCB, GetCommMask, GetOverlappedResult, OVERLAPPED, SetCommMask, SetCommState