通信イベント
プロセスによって、通信リソースで発生する一連のイベントを監視できます。 たとえば、アプリケーションでは、イベント監視を使用して、CTS (clear-to-send) シグナルと DSR (data-set-ready) シグナルによって状態が変更されるタイミングを判断できます。
プロセスによって、SetCommMask 関数を使用してイベント マスクを作成することにより、特定の通信リソースのイベントを監視できます。 通信リソースの現在のイベント マスクを特定するため、プロセスでは GetCommMask 関数を使用できます。 次の値は、監視できるイベントを指定します。
Value | 意味 |
---|---|
EV_BREAK | 入力時にブレークが検出されました。 |
EV_CTS | CTS (clear-to-send) シグナルにより状態が変更されました。 |
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 | イベント文字が受信され、入力バッファーに配置されました。 イベント文字は、SetCommState 関数を使用してシリアル ポートに適用される、デバイスの DCB 構造で指定されます。 |
EV_TXEMPTY | 出力バッファーの最後の文字が送信されました。 |
一連のイベントが指定されると、プロセスは WaitCommEvent 関数を使用して、いずれかのイベントが発生するのを待機します。 WaitCommEvent は、同期的に使用することも、重複する操作として使用することもできます。 重複する操作として関数を実行する方法について詳しくは、「同期」をご覧ください。
イベント マスクで指定されたイベントのいずれかが発生すると、プロセスは待機操作を完了し、検出されたイベントの種類を示すイベント マスク変数を設定します。 そのリソースの待機が保留中の間に通信リソースに対して SetCommMask が呼び出されると、WaitCommEvent はエラーを返します。
WaitCommEvent 関数は、SetCommMask または WaitCommEvent の前回の呼び出し以降に発生したイベントを検出します。 たとえば、EV_RXCHAR イベントを wait-satisfying イベントとして指定した場合、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 関数を使用できます。