<Return[WXYZ]><Top>

WaitCommEvent

Declare Function Api_WaitCommEvent& Lib "kernel32" Alias "WaitCommEvent" (ByVal hFile&, lpEvtMask&, lpOverlapped As OVERLAPPED)

Declare Function WaitCommEvent Lib "kernel32" Alias "WaitCommEvent" (ByVal hFile As Long, lpEvtMask As Long, lpOverlapped As OVERLAPPED) As Long

指定した通信デバイスでイベントが発生するのを待機する。この関数で監視するイベントは、デバイスのハンドルに関連付けられているイベントマスクによって示される。

パラメータ
hFile
    通信デバイスのハンドルを指定する。CreateFile 関数が返すハンドルを使う。
lpEvtMask
    32 ビット変数へのポインタを指定する。変数には、発生したイベントの種類を示すマスクが格納される。エラーが発生すると、0 が格納され

    る。それ以外の場合は、次のいずれかの値が格納される。

    定数                    

意味                                                                                                                                                    

    EV_BREAK

入力上でブレークを検出した。

    EV_CTS

CTS(送信可)信号の状態が変わった。

    EV_DSR

DSR(データセットレディ)信号の状態が変わった。

    EV_ERR

回線状態エラーが発生した。回線状態エラーには、CE_FRAME、CE_OVERRUN、CE_RXPARITY がある。

    EV_RING

呼び出し信号を検出した。

    EV_RLSD

RLSD(受信線信号検出)信号の状態が変わった。

    EV_RXCHAR

1 文字受信し、入力バッファに入れた。

    EV_RXFLAG

 

イベント文字を受信し、入力バッファに入れた。イベント文字はデバイスの DCB 構造体で指定する。この構造体を使ってシリアルポートを設定するには、SetCommState 関数を使う。

    EV_TXEMPTY

出力バッファの最後の文字を送信した。

lpOverlapped
    OVERLAPPED 構造体へのポインタを指定する。hFile パラメータが示すデバイスを開くときに FILE_FLAG_OVERLAPPED フラグをセット

    した場合はこの構造体が必要になる。
    hFile を開くときに FILE_FLAG_OVERLAPPED フラグをセットした場合は、lpOverlapped パラメータには有効な OVERLAPPED 構造体

    へのポインタを渡さなければならない。NULL を渡すと、関数が操作の完了を誤って報告することがある。
    hFile を開くときに FILE_FLAG_OVERLAPPED フラグをセットして、lpOverlapped に NULL 以外のポインタを渡すと、WaitCommEvent

    関数は重複操作として実行される。このとき、OVERLAPPED 構造体に手動リセットイベントオブジェクト(CreateEvent 関数を使って作成す

    る)のハンドルを指定しておく必要がある。
    hFile を開くときに FILE_FLAG_OVERLAPPED フラグをセットしなかった場合は、監視対象のイベントのいずれかが発生するか、エラーが

    発生するまで制御が戻らない。

戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、GetLastError 関数を使u。

解説
    WaitCommEvent 関数は、指定された通信資源で一連のイベントを監視する。通信資源の現在のイベントマスクを設定、取得する場合

    は、それぞれ SetCommMask 関数と GetCommMask 関数を使u。
    重複操作をただちに完了できない場合、この関数は FALSE を返し、GetLastError 関数が ERROR_IO_PENDING を返す。この値は、

    操作がバックグラウンドで実行中であることを示す。さらに、WaitCommEvent 関数が制御を返す前に、システムが OVERLAPPED 構造

    体の hEvent メンバを非シグナル状態に設定する。監視状態のイベントまたはエラーが起こると、設定がシグナル状態に変わる。呼び出し

    側のプロセスはいずれかの待機関数を使ってイベントオブジェクトの状態を調べた後、GetOverlappedResult 関数を使っ

    て WaitCommEvent の結果を調べることができる。GetOverlappedResult 関数は操作が成功したか失敗したかを報告し、lpEvtMask パ

    ラメータが示す変数が、発生したイベントを示す値に設定される。
    WaitCommEvent の重複操作の実行中にプロセスが SetCommMask 関数を使ってデバイスのハンドルに対応するイベントマスクを変更しよ

    うとすると、WaitCommEvent 関数はただちに制御を戻す。このとき、lpEvtMask パラメータの示す変数は 0 に設定される。