通訊事件
進程可以監視通訊資源中發生的一組事件。 例如,應用程式可以使用事件監視來判斷 CTS(清除到傳送)和 DSR(數據集就緒)何時發出變更狀態。
進程可以使用 SetCommMask 函式來建立事件遮罩,來監視指定通訊資源上的事件。 若要判斷通訊資源的目前事件遮罩,進程可以使用 getCommMask函式。 下列值會指定可監視的事件。
價值 | 意義 |
---|---|
EV_BREAK | 在輸入時偵測到中斷。 |
EV_CTS | CTS(清除到傳送)訊號已變更狀態。 |
EV_DSR | DSR (data-set-ready) 訊號已變更狀態。 |
EV_ERR | 發生行狀態錯誤。 行狀態錯誤 CE_FRAME、CE_OVERRUN和 CE_RXPARITY。 |
EV_RING | 偵測到環形指示器。 |
EV_RLSD | RLSD (receive-line-signal-detect) 訊號已變更狀態。 |
EV_RXCHAR | 已接收字元並放置在輸入緩衝區中。 |
EV_RXFLAG | 事件字元已接收並放置在輸入緩衝區中。 事件字元是在裝置的 DCB 結構中指定,該結構會使用 SetCommState 函式套用至序列埠。 |
EV_TXEMPTY | 輸出緩衝區的最後一個字元已傳送。 |
指定一組事件之後,進程會使用 waitCommEvent 函式來等候其中一個事件發生。 WaitCommEvent 可以同步或做為重疊的作業使用。 如需以重迭作業方式執行函式的其他資訊,請參閱同步處理 。
當事件遮罩中指定的其中一個事件發生時,進程會完成等候作業,並設定事件遮罩變數來指出偵測到的事件類型。 如果在等候該資源等待時呼叫 SetCommMask,WaitCommEvent 傳回錯誤。
WaitCommEvent 函式會偵測自上次 呼叫 SetCommMask 或 WaitCommEvent之後發生的事件。 例如,如果您將 EV_RXCHAR 事件指定為滿足等候的事件,則會滿足對 waitCommEvent 的 呼叫,如果驅動程式輸入緩衝區中有字元已抵達,WaitCommEvent 或 SetCommMask。 因此,假設下列虛擬程式碼,在 T1 與 T2 之間接收的任何字元都會滿足下一次呼叫 WaitCommEvent。
while (!bFinished)
{
WaitCommEvent(args)
T1: // Read bytes
// Process bytes
T2:
}
監視訊號 (CTS、DSR 等) 變更狀態時所發生的事件時,WaitCommEvent 報告變更,但不會報告目前狀態。 若要查詢 CTS (clear-to-send)、DSR (data-set-ready)、RLSD (receive-line-signal-detect) 和信號指標訊號的目前狀態,進程可以使用 getCommModemStatus函式。