次の方法で共有


WaitForSingleObjectEx 関数 (synchapi.h)

指定したオブジェクトがシグナル状態になるまで待機し、I/O 完了ルーチンまたは非同期プロシージャ呼び出し (APC) がスレッドにキューに登録されるか、タイムアウト間隔が経過するまで待機します。

複数のオブジェクトを待機するには、WaitForMultipleObjectsExを使用します。

構文

DWORD WaitForSingleObjectEx(
  [in] HANDLE hHandle,
  [in] DWORD  dwMilliseconds,
  [in] BOOL   bAlertable
);

パラメーター

[in] hHandle

オブジェクトのハンドル。 ハンドルを指定できるオブジェクトの種類の一覧については、次の「解説」セクションを参照してください。

待機がまだ保留中の間にこのハンドルを閉じると、関数の動作は未定義になります。

ハンドルには、SYNCHRONIZE アクセス権が必要です。 詳細については、「Standard Access Rights」を参照してください。

[in] dwMilliseconds

タイムアウト間隔 (ミリ秒単位)。 0 以外の値を指定した場合、関数は、オブジェクトが通知されるまで待機するか、I/O 完了ルーチンまたは APC がキューに登録されるか、または間隔が経過するまで待機します。 dwMilliseconds が 0 の場合、条件が満たされていない場合、関数は待機状態になりません。常にすぐに返されます。 dwMilliseconds が INFINITE場合、関数はオブジェクトが通知されるか、I/O 完了ルーチンまたは APC がキューに登録されている場合にのみ返されます。

Windows XP、Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008、および Windows Server 2008 R2:dwMilliseconds 値には、低電力状態で費やされた時間が含まれます。 たとえば、コンピューターがスリープ状態の間、タイムアウトはカウントダウンし続けます。

Windows 8 以降、Windows Server 2012 以降:dwMilliseconds 値には、低電力状態で費やされた時間は含まれません。 たとえば、コンピューターがスリープ状態の間にタイムアウトがカウントダウンし続けないようにします。

[in] bAlertable

このパラメーターが TRUE 、スレッドが待機状態の場合、システムが I/O 完了ルーチンまたは APC をキューに入れ、スレッドがルーチンまたは関数を実行するときに関数が返されます。 それ以外の場合、関数は戻らず、完了ルーチンまたは APC 関数は実行されません。

完了ルーチンは、ReadFileEx または指定された WriteFileEx 関数 が完了したときにキューに入れられます。 待機関数が戻り、完了ルーチンが呼び出されるのは、bAlertable TRUE場合のみです。呼び出し元のスレッドは、読み取りまたは書き込み操作を開始したスレッドです。 QueueUserAPC呼び出すと、APC がキューに登録されます。

戻り値

関数が成功した場合、戻り値は関数が戻る原因となったイベントを示します。 次のいずれかの値を指定できます。

戻りコード/値 形容
WAIT_ABANDONED
0x00000080L
指定されたオブジェクトは、所有しているスレッドが終了する前にミューテックス オブジェクトを所有していたスレッドによって解放されなかったミューテックス オブジェクトです。 ミューテックス オブジェクトの所有権は呼び出し元のスレッドに付与され、ミューテックスは非署名に設定されます。

ミューテックスが永続的な状態情報を保護していた場合は、整合性を確認する必要があります。

WAIT_IO_COMPLETION
0x000000C0L
スレッドにキューに入 (APC) の非同期プロシージャ呼び出し 、1 つ以上のユーザー モードによって待機が終了しました。
WAIT_OBJECT_0
0x00000000L
指定したオブジェクトの状態が通知されます。
WAIT_TIMEOUT
0x00000102L
タイムアウト間隔が経過し、オブジェクトの状態は非署名です。
WAIT_FAILED
(DWORD)0xFFFFFFFF
関数が失敗しました。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

WaitForSingleObjectEx 関数は、待機条件が満たされているかどうかを判断します。 条件が満たされていない場合、呼び出し元のスレッドは、待機条件の条件が満たされるかタイムアウト間隔が経過するまで待機状態に入ります。

この関数は、一部の種類の同期オブジェクトの状態を変更します。 変更は、シグナル状態によって関数が返される原因となったオブジェクトに対してのみ行われます。 たとえば、セマフォ オブジェクトの数は 1 ずつ減少します。

WaitForSingleObjectEx 関数は、次のオブジェクトを待機できます。

  • 変更通知
  • コンソール入力
  • 出来事
  • メモリ リソース通知
  • ミューテックス
  • 過程
  • セマフォ
  • 待機可能タイマー
直接または間接的にウィンドウを作成する待機関数とコードを呼び出す場合は注意が必要です。 スレッドがウィンドウを作成する場合は、メッセージを処理する必要があります。 メッセージ ブロードキャストは、システム内のすべてのウィンドウに送信されます。 タイムアウト間隔のない待機関数を使用するスレッドによって、システムがデッドロックになる可能性があります。 ウィンドウを間接的に作成するコードの 2 つの例は、DDE と CoInitialize 関数です。 したがって、ウィンドウを作成するスレッドがある場合は、WaitForSingleObjectExではなく、MsgWaitForMultipleObjectsEx または msgWaitForMultipleObjectsEx使用します。

例については、「完了ルーチンを使用した名前付きパイプ サーバーの を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー synchapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

同期関数の

待機関数の