WaitCommEvent 関数 (winbase.h)

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

構文

BOOL WaitCommEvent(
  [in]  HANDLE       hFile,
  [out] LPDWORD      lpEvtMask,
  [in]  LPOVERLAPPED lpOverlapped
);

パラメーター

[in] hFile

通信デバイスへのハンドル。 CreateFile 関数は、このハンドルを返します。

[out] lpEvtMask

発生したイベントの種類を示すマスクを受け取る変数へのポインター。 エラーが発生した場合、値は 0 です。それ以外の場合は、次のいずれかの値になります。

説明
EV_BREAK
0x0040
入力時にブレークが検出されました。
EV_CTS
0x0008
CTS (送信クリア) シグナルの状態が変更されました。
EV_DSR
0x0010
DSR (データ セット対応) シグナルの状態が変更されました。
EV_ERR
0x0080
行状態エラーが発生しました。 行の状態エラーは 、CE_FRAMECE_OVERRUNおよびCE_RXPARITY
EV_RING
0x0100
リング インジケーターが検出されました。
EV_RLSD
0x0020
RLSD (receive-line-signal-detect) シグナル変更状態。
EV_RXCHAR
0x0001
文字が受信され、入力バッファーに格納されました。
EV_RXFLAG
0x0002
イベント文字が受信され、入力バッファーに配置されました。 イベント文字は、SetCommState 関数を使用してシリアル ポートに適用される、デバイスの DCB 構造体で指定されます。
EV_TXEMPTY
0x0004
出力バッファーの最後の文字が送信されました。

[in] lpOverlapped

OVERLAPPED 構造体へのポインター。 この構造体は、 hFileFILE_FLAG_OVERLAPPED で開かれた場合に必要です。

hFileFILE_FLAG_OVERLAPPEDで開かれた場合、lpOverlapped パラメーターは NULL にすることはできません。 有効な OVERLAPPED 構造体を指す必要があります。 hFileFILE_FLAG_OVERLAPPED で開き、lpOverlappedNULL の場合、関数は操作が完了したことを誤って報告する可能性があります。

hFileFILE_FLAG_OVERLAPPED で開かれたが lpOverlappedNULL でない場合、WaitCommEvent は重複した操作として実行されます。 この場合、 OVERLAPPED 構造体には、( CreateEvent 関数を使用して作成された) 手動リセット イベント オブジェクトへのハンドルが含まれている必要があります。

hFileFILE_FLAG_OVERLAPPEDで開かれていた場合、WaitCommEvent は、指定されたイベントのいずれかが発生するか、エラーが発生するまで戻りません。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

WaitCommEvent 関数は、指定された通信リソースの一連のイベントを監視します。 通信リソースの現在のイベント マスクを設定してクエリするには、 SetCommMask 関数と GetCommMask 関数を使用します。

重複した操作をすぐに完了できない場合、関数は FALSE を 返し、 GetLastError 関数は ERROR_IO_PENDINGを返し、操作がバックグラウンドで実行されていることを示します。 この場合、システムは、WAITCommEvent が返される前に OVERLAPPED 構造体の hEvent メンバーを非シグナル状態に設定し、指定されたイベントまたはエラーのいずれかが発生したときにシグナル状態に設定します。 呼び出し元のプロセスでは、 待機関数 のいずれかを使用してイベント オブジェクトの状態を確認し、 GetOverlappedResult 関数を使用して WaitCommEvent 操作の結果を確認できます。 GetOverlappedResult は操作の成功または失敗を報告し、 lpEvtMask パラメーターが指す変数は、発生したイベントを示すように設定されます。

重複する WaitCommEvent 操作の進行中に SetCommMask 関数を使用してデバイス ハンドルのイベント マスクを変更しようとすると、WaitCommEvent は直ちに返されます。 lpEvtMask パラメーターが指す変数は 0 に設定されます。

例については、「 通信イベントの監視」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

Communications 関数

通信リソース

CreateFile

DCB

GetCommMask

GetOverlappedResult

OVERLAPPED

SetCommMask

SetCommState