次の方法で共有


通信イベント

プロセスによって、通信リソースで発生する一連のイベントを監視できます。 たとえば、アプリケーションでは、イベント監視を使用して、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_FRAMECE_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 関数を使用できます。