通信イベント
プロセスは、通信リソースで発生する一連のイベントを監視できます。 たとえば、アプリケーションでは、イベント監視を使用して、CTS (clear-to-send) シグナルと DSR (データ セット対応) シグナルが状態を変更するタイミングを判断できます。
プロセスでは、SetCommMask 関数を使用してイベント マスクを作成することで、特定の通信リソースのイベントを監視できます。 通信リソースの現在のイベント マスクを決定するために、プロセスは GetCommMask 関数を使用できます。 次の値は、監視できるイベントを指定します。
価値 | 意味 |
---|---|
EV_BREAK | 入力時に中断が検出されました。 |
EV_CTS | CTS (clear-to-send) 信号の状態が変更されました。 |
EV_DSR | DSR (データ セット対応) シグナルの状態が変更されました。 |
EV_ERR | 行の状態エラーが発生しました。 行ステータス エラーは、CE_FRAME、CE_OVERRUN、および CE_RXPARITYです。 |
EV_RING | リング インジケーターが検出されました。 |
EV_RLSD | RLSD (receive-line-signal-detect) 信号の変更状態。 |
EV_RXCHAR | 文字が受信され、入力バッファーに配置されました。 |
EV_RXFLAG | イベント文字が受信され、入力バッファーに配置されました。 イベント文字は、SetCommState 関数を使用してシリアル ポートに適用される、デバイスの DCB 構造体で指定されます。 |
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 関数を使用できます。