KsWaitCommEvent
此函式是否可用依装置支援项目而定。
等待指定通讯装置发生事件,此函式所监视的事件集包含在与装置控制代码关联的事件遮罩中。
语法
BOOL KsWaitCommEvent(
HANDLE hFile,
LPDWORD lpEvtMask,
LPOVERLAPPED lpOverlapped
);
参数
hFile:通讯装置的控制代码,KsCreateComm 函式回传此控制代码。
lpEvtMask:接收变数的指标,该变数指出发生之事件类型的遮罩,若发生错误,则值为零,否则为以下其中之一值:
值 | 说明 |
---|---|
EV_BREAK 0x0040 |
输入侦测到中断。 |
EV_CTS 0x0008 |
清除发送 (clear-to-send, CTS) 讯号状态改变。 |
EV_DSR 0x0010 |
资料集备妥 (data-set-ready, DSR) 讯号状态改变。 |
EV_ERR 0x0080 |
发生线路状态错误。线路状态错误为 CE_FRAME、CE_OVERRUN 与CE_RXPARITY。 |
EV_RING 0x0100 |
侦测到振铃指示器。 |
EV_RLSD 0x0020 |
接收线路讯号检测 (receive-line-signal-detect, RLSD ) 讯号状态改变。 |
EV_RXCHAR 0x0001 |
字元已接收且置于输入缓冲区。 |
EV_RXFLAG 0x0002 |
事件字元已接收且置于输入缓冲区,事件字元在装置的 DCB 结构中指定,其使用 KsSetCommState 套用至串联埠。 |
EV_TXEMPTY 0x0004 |
输出缓冲区的最后一个字元已传送。 |
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, KsWaitCommEvent 会如重叠作业般运作,如此,OVERLAPPED 结构须包含手动重置事件物件的控制代码(使用 CreateEvent 函式创建)。
若非用 FILE_FLAG_OVERLAPPED
开启 hFile,KsWaitCommEvent 在指定事件或错误发生前不会回传。
回传值
若函式执行成功将回传 TRUE;失败将回传 FALSE。欲获取延伸错误资讯请呼叫 GetLastError。
备注
KsWaitCommEvent 函式为指定的通讯资源监控一组事件,欲设定及查询通讯资源的当前事件遮罩,请使用 KsSetCommMask 与 KsGetCommMask 函式。
若重叠作业无法立即完成,函式将回传 FALSE 而 GetLastError 函式将回传 ERROR_IO_PENDING
,表示作业正在背景执行,发生此情况时,系统会在 KsWaitCommEvent 回传之前将 OVERLAPPED 结构的 hEvent
成员设置为非信号状态,然后在指定事件或发生错误时将其设置为有信号状态,呼叫过程可使用 wait 内其中一个函式来确定事件物件的状态,然后使用 KsGetOverlappedResult 函式来确定 KsWaitCommEvent 运作的结果,KsGetOverlappedResult 将回报运作成功与否,而lpEvtMask 参数指向的变数将设定来指示发生的事件。
若处理序在重叠的 KsWaitCommEvent 操作正在进行时,尝试使用 KsSetCommMask 函式更改装置控制代码的事件遮罩,则 KsWaitCommEvent 将立即转回,lpEvtMask 参数指向的变数设定为零。
范例
N/A
使用需求
RT | Win32 | |
---|---|---|
最低支援版本 | 4.0 | 4.0 |
标头档 | kscom.h | kscom.h |
程式库 | KsApi_Rtss.lib | ksapi.h |
参见