次の方法で共有


WaitForMultipleObjects 関数 (synchapi.h)

指定したオブジェクトの 1 つ以上がシグナル状態であるか、タイムアウト間隔が経過するまで待機します。

警告可能な待機状態を入力するには、waitForMultipleObjectsEx 関数 使用します。

構文

DWORD WaitForMultipleObjects(
  [in] DWORD        nCount,
  [in] const HANDLE *lpHandles,
  [in] BOOL         bWaitAll,
  [in] DWORD        dwMilliseconds
);

パラメーター

[in] nCount

lpHandlesによって指 配列内のオブジェクト ハンドルの数。 オブジェクト ハンドルの最大数は MAXIMUM_WAIT_OBJECTS。 このパラメーターを 0 にすることはできません。

[in] lpHandles

オブジェクト ハンドルの配列。 ハンドルを指定できるオブジェクトの種類の一覧については、次の「解説」セクションを参照してください。 配列には、さまざまな型のオブジェクトへのハンドルを含めることができます。 同じハンドルの複数のコピーが含まれていない場合があります。

待機がまだ保留中の間にこれらのハンドルのいずれかが閉じられた場合、関数の動作は未定義です。

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

[in] bWaitAll

このパラメーターが TRUE場合、この関数は、lpHandles 配列内のすべてのオブジェクトの状態が通知されたときに返されます。 FALSE場合、いずれかのオブジェクトの状態がシグナル通知に設定されたときに関数が返されます。 後者の場合、戻り値は、関数が戻る原因となった状態のオブジェクトを示します。

[in] dwMilliseconds

タイムアウト間隔 (ミリ秒単位)。 0 以外の値を指定した場合、関数は、指定されたオブジェクトが通知されるか、間隔が経過するまで待機します。 dwMilliseconds が 0 の場合、指定したオブジェクトがシグナル通知されない場合、関数は待機状態になりません。常にすぐに返されます。 dwMilliseconds が INFINITE場合、関数は指定されたオブジェクトが通知されたときにのみ返されます。

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

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

戻り値

関数が成功した場合、戻り値は関数が戻る原因となったイベントを示します。 次のいずれかの値を指定できます。 (WAIT_OBJECT_0 は 0 として定義され、WAIT_ABANDONED_0 は 0x00000080L として定義されることに注意してください)。

戻りコード/値 形容
WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount– 1)
bWaitAll が TRUE場合、指定した範囲内の戻り値は、指定されたすべてのオブジェクトの状態が通知されることを示します。

bWaitAll が FALSE場合、戻り値から WAIT_OBJECT_0 を引いた値は、待機を満たすオブジェクトの配列インデックス lpHandles を示します。 呼び出し中に複数のオブジェクトがシグナル通知された場合、これはシグナルオブジェクトの配列インデックスであり、すべてのシグナルオブジェクトのインデックス値が最小になります。

WAIT_ABANDONED_0 (WAIT_ABANDONED_0 + nCount– 1)
bWaitAll が TRUE場合、指定した範囲内の戻り値は、指定されたすべてのオブジェクトの状態が通知され、少なくとも 1 つのオブジェクトが破棄されたミューテックス オブジェクトであることを示します。

bWaitAll が FALSE場合、戻り値から WAIT_ABANDONED_0 を引いた値は、待機を満たす破棄されたミューテックス オブジェクトの配列インデックス lpHandles を示します。 ミューテックス オブジェクトの所有権は呼び出し元のスレッドに付与され、ミューテックスは非署名に設定されます。

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

WAIT_TIMEOUT
0x00000102L
タイムアウト間隔が経過し、bWaitAll パラメーターで指定された条件が満たされていません。
WAIT_FAILED
(DWORD)0xFFFFFFFF
関数が失敗しました。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

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

bWaitAll が TRUE場合、関数の待機操作は、すべてのオブジェクトの状態がシグナル通知に設定されている場合にのみ完了します。 この関数は、すべてのオブジェクトの状態がシグナル通知に設定されるまで、指定されたオブジェクトの状態を変更しません。 たとえば、ミューテックスを通知することはできますが、他のオブジェクトの状態もシグナル通知に設定されるまで、スレッドは所有権を取得しません。 それまでの間、他のスレッドがミューテックスの所有権を取得し、その状態を非署名に設定する場合があります。

bWaitAll が FALSE場合、この関数は、オブジェクトの 1 つが通知されるまで、インデックス 0 で始まる順序で配列内のハンドルをチェックします。 複数のオブジェクトがシグナル通知された場合、関数はオブジェクトがシグナル通知された配列内の最初のハンドルのインデックスを返します。

この関数は、一部の種類の同期オブジェクトの状態を変更します。 変更は、シグナル状態によって関数が戻される原因となったオブジェクトに対してのみ行われます。 たとえば、セマフォ オブジェクトの数は 1 ずつ減少します。 詳細については、個々の同期オブジェクトのドキュメントを参照してください。

MAXIMUM_WAIT_OBJECTS を超えるハンドルを待機するには、次のいずれかの方法を使用します。

  • MAXIMUM_WAIT_OBJECTS ハンドルを待機するスレッドを作成し、そのスレッドと他のハンドルを待機します。 この手法を使用して、ハンドルを MAXIMUM_WAIT_OBJECTSのグループに分割します。
  • RegisterWaitForSingleObject 呼び出すか、SetThreadpoolWait を して各ハンドルを待機します。 スレッド プールはハンドルで効率的に待機し、オブジェクトが通知されるかタイムアウト間隔が切れた後にワーカー スレッドを割り当てます。
WaitForMultipleObjects 関数は、lpHandles 配列内の次のいずれかのオブジェクト型のハンドルを指定できます。
  • 変更通知
  • コンソール入力
  • 出来事
  • メモリ リソース通知
  • ミューテックス
  • 過程
  • セマフォ
  • 待機可能タイマー
直接または間接的にウィンドウを作成する待機関数とコードを呼び出す場合は注意が必要です。 スレッドがウィンドウを作成する場合は、メッセージを処理する必要があります。 メッセージ ブロードキャストは、システム内のすべてのウィンドウに送信されます。 タイムアウト間隔のない待機関数を使用するスレッドによって、システムがデッドロックになる可能性があります。 ウィンドウを間接的に作成するコードの 2 つの例は、DDE と CoInitialize 関数です。 そのため、ウィンドウを作成するスレッドがある場合は、WaitForMultipleObjectsではなく、MsgWaitForMultipleObjectsex または MsgWaitForMultipleObjectsEx使用します。

例については、「複数のオブジェクトを待機する 」を参照してください。

必要条件

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

関連項目

WAIT_ABANDONED_0

同期関数の

待機関数の