次の方法で共有


通信イベント

プロセスは、通信リソースで発生する一連のイベントを監視できます。 たとえば、アプリケーションでは、イベント監視を使用して、CTS (clear-to-send) シグナルと DSR (データ セット対応) シグナルが状態を変更するタイミングを判断できます。

プロセスでは、SetCommMask 関数を使用してイベント マスクを作成することで、特定の通信リソースのイベントを監視できます。 通信リソースの現在のイベント マスクを決定するために、プロセスは GetCommMask 関数を使用できます。 次の値は、監視できるイベントを指定します。

価値 意味
EV_BREAK 入力時に中断が検出されました。
EV_CTS CTS (clear-to-send) 信号の状態が変更されました。
EV_DSR DSR (データ セット対応) シグナルの状態が変更されました。
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 イベントを指定した場合、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 関数を使用できます。