MsgWaitForMultipleObjects 関数 (winuser.h)
指定したオブジェクトの 1 つ以上がシグナル状態であるか、タイムアウト間隔が経過するまで待機します。 オブジェクトには、dwWakeMask パラメーターを使用して指定する入力イベント オブジェクトを含めることができます。
警告可能な待機状態を入力するには、MsgWaitForMultipleObjectsEx 関数を使用します。
構文
DWORD MsgWaitForMultipleObjects(
[in] DWORD nCount,
[in] const HANDLE *pHandles,
[in] BOOL fWaitAll,
[in] DWORD dwMilliseconds,
[in] DWORD dwWakeMask
);
パラメーター
[in] nCount
pHandlesが指す配列内のオブジェクト ハンドルの数。 オブジェクト ハンドルの最大数は、MAXIMUM_WAIT_OBJECTS マイナス 1 です。 このパラメーターの値が 0 の場合、関数は入力イベントのみを待機します。
[in] pHandles
オブジェクト ハンドルの配列。 ハンドルを指定できるオブジェクトの種類の一覧については、次の「解説」セクションを参照してください。 配列には、さまざまな型のオブジェクトのハンドルを含めることができます。 同じハンドルの複数のコピーが含まれていない場合があります。
待機がまだ保留中の間にこれらのハンドルのいずれかが閉じられた場合、関数の動作は未定義です。
ハンドルには、SYNCHRONIZE アクセス権が必要です。 詳細については、「Standard Access Rights」を参照してください。
[in] fWaitAll
このパラメーターが TRUE
[in] dwMilliseconds
タイムアウト間隔 (ミリ秒単位)。 0 以外の値を指定した場合、関数は、指定されたオブジェクトが通知されるか、間隔が経過するまで待機します。 dwMilliseconds
Windows XP、Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008、および Windows Server 2008 R2:dwMilliseconds 値には、低電力状態で費やされた時間が含まれます。 たとえば、コンピューターがスリープ状態の間、タイムアウトはカウントダウンし続けます。
Windows 8 以降、Windows Server 2012 以降:dwMilliseconds 値には、低電力状態で費やされた時間は含まれません。 たとえば、コンピューターがスリープ状態の間にタイムアウトがカウントダウンし続けないようにします。
[in] dwWakeMask
入力イベント オブジェクト ハンドルがオブジェクト ハンドルの配列に追加される入力の種類。 このパラメーターは、getQueueStatus
戻り値
関数が成功した場合、戻り値は関数が戻る原因となったイベントを示します。 次のいずれかの値を指定できます。 (WAIT_OBJECT_0 は 0 として定義され、WAIT_ABANDONED_0 は 0x00000080L として定義されることに注意してください)。
戻りコード/値 | 形容 |
---|---|
|
|
|
dwWakeMask パラメーターで指定された型の新しい入力は、スレッドの入力キューで使用できます。 この値は、フォアグラウンドのアクティブ化など、スレッドのアクションを必要とするシステム イベントが発生したときにも返されます。 したがって、適切な入力が使用できなくても、 |
|
ミューテックスが永続的な状態情報を保護していた場合は、整合性を確認する必要があります。 |
|
タイムアウト間隔が経過し、bWaitAll および dwWakeMask パラメーターで指定された条件が満たされませんでした。 |
|
関数が失敗しました。 拡張エラー情報を取得するには、GetLastError |
備考
MsgWaitForMultipleObjects 関数は、待機条件が満たされているかどうかを判断します。 条件が満たされていない場合、呼び出し元のスレッドは、待機条件の条件が満たされるかタイムアウト間隔が経過するまで待機状態に入ります。
MsgWaitForMultipleObjects は、スレッドがキューをチェックする関数を呼び出した後に、メッセージ キューに指定された型の未読入力がある場合は返されません。 これは、PeekMessage、getMessage、GetQueueStatus、Wait Message などの関数がキューをチェックし、キューの状態情報を変更して入力が新しいものと見なされないようにするためです。 MsgWaitForMultipleObjects の後続の呼び出しは、指定した型の新しい入力が到着するまで戻りません。 既存の未読入力 (スレッドがキューを最後にチェックした前に受信) は無視されます。
この関数は、一部の種類の同期オブジェクトの状態を変更します。 変更は、シグナル状態によって関数が戻される原因となったオブジェクトに対してのみ行われます。 たとえば、セマフォ オブジェクトの数は 1 ずつ減少します。 詳細については、個々の同期オブジェクトのドキュメントを参照してください。
MsgWaitForMultipleObjects 関数は、pHandles 配列内の次のいずれかのオブジェクト型のハンドルを指定できます。
- 変更通知
- コンソール入力
- 出来事
- メモリ リソース通知
- ミューテックス
- 過程
- セマフォ
- 糸
- 待機可能タイマー
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winuser.h (Windows.h を含む) |
ライブラリ | User32.lib |
DLL | User32.dll |
関連項目
MsgWaitForMultipleObjectsEx の