通訊事件
進程可以監視通訊資源中發生的一組事件。 例如,應用程式可以使用事件監視來判斷 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結構中指定,該結構會使用STtCommState函式套用至序列埠。 |
EV_TXEMPTY | 輸出緩衝區的最後一個字元已傳送。 |
指定一組事件之後,進程會使用 WaitCommEvent 函式等候其中一個事件發生。 WaitCommEvent 可以同步或做為重疊的作業使用。 如需執行函式做為重迭作業的其他資訊,請參閱 同步處理。
當事件遮罩中指定的其中一個事件發生時,進程會完成等候作業,並設定事件遮罩變數來指出偵測到的事件類型。 如果在等候該資源的等候擱置時呼叫 SetCommMask,則 WaitCommEvent 會傳回錯誤。
WaitCommEvent 函式會偵測自上次呼叫 SetCommMask 或 WaitCommEvent 之後發生的事件。 例如,如果您將EV_RXCHAR事件指定為滿足等候的事件,如果驅動程式的輸入緩衝區中有自最後一次呼叫 WaitCommEvent 或 SetCommMask 之後抵達的字元,就會滿足 WaitCommEvent 的呼叫。 因此,假設下列虛擬程序代碼,在 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 函式。