MsgWaitForMultipleObjects

指定したカーネルオブジェクトのうちの1つまたはそれらのすべてがシグナル状態になるか、スレッドの所有するウィンドウに指定したタイプのメッセージが送られるか、指定したタイムアウト時間が経過するまでスレッドをスリープさせます。

DWORD WaitForMultipleObjects(
    DWORD  nCount,          // チェックするオブジェクトの数
    CONST HANDLE *pHandles, // オブジェクトハンドルの配列
    BOOL   bWaitAll,        // 1つかすべてかのフラグ
    DWORD  dwMilliseconds,  // タイムアウト時間
    DWORD  dwMakeMask       // メッセージのタイプを示すフラグ
);

USER32.DLL

引数

nCount

pHandles パラメータが指し示す配列のカーネルオブジェクトのハンドルの数を指定します。指定できるオブジェクトの最大数は 64 (MAXIMUM_WAIT_OBJECTS) - 1 個です。

pHandles

カーネルオブジェクトのハンドルを格納した配列変数のアドレスを指定します。同じオブジェクトが複数回指定されるとエラーになります。

待機が未解決の状態でこれらのハンドルの1つがクローズされた場合の関数の動作は定義されていません。

Windows NT/2000/XP: オブジェクトのハンドルは SYNCHRONIZE アクセスを持っていなければなりません。

bWaitAll

リスト内のすべてのオブジェクトを待つか、どれか1つのみを待つかを指定します。 1 (TRUE) を指定すると、すべてのオブジェクトがシグナル状態になるのを待ちます。 0 (FALSE) を指定すると、どれか1つがシグナル状態になるのを待ちます。

dwMilliseconds

待ち時間をミリ秒単位で指定します。 0 を指定すると、オブジェクトがシグナル状態かどうかを調べてすぐに制御を返します。 0xFFFFFFFF (INFINITE) を指定すると、オブジェクトがシグナル状態になるまで無限に待ち続けます。

dwMakeMask

どのタイプのメッセージがメッセージキューにセットされたらスレッドの実行を再開させるかを指定します。以下の値の組み合わせで指定します。

キュー内のメッセージ
0x0001 (QS_KEY) WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP のどれか
0x0002 (QS_MOUSEMOVE) WM_MOUSEMOVE
0x0004 (QS_MOUSEBUTTON) WM_?BUTTON***
(? は L, M, R のどれか。*** は DOWN, UP, DBLCLK のどれか)
0x0008 (QS_POSTMESSAGE) ポストされたメッセージ(ハードウェア入力イベント以外)
0x0010 (QS_TIMER) WM_TIMER
0x0020 (QS_PAINT) WM_PAINT
0x0040 (QS_SENDMESSAGE) 他のスレッド、プロセスから送られてきたメッセージ
0x0080 (QS_HOTKEY) WM_HOTKEY
0x0006 (QS_MOUSE) QS_MOUSEMOVE | QS_MOUSEBUTTON に等しい
0x0007 (QS_INPUT) QS_MOUSE | QS_KEY に等しい
0x00BF (QS_ALLEVENTS) QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY に等しい
0x00FF (QS_ALLINPUT) QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE に等しい

戻り値

以下の値のいずれかを返します。

0x00000000 (WAIT_OBJECT_0) から (nCount - 1) まで

全オブジェクトを待っている場合には、すべてのオブジェクトがシグナル状態になったことを示します。任意のオブジェクトを待っている場合には、シグナル状態になったオブジェクトハンドルの、 pHandles 配列内でのインデックスを示します。

nCount

dwMakeMask パラメータで指定された型の新しいメッセージがスレッド入力キューから得られるようになったことを示します。

0x00000080 (WAIT_ABANDONED) から (WAIT_ABANDONED + nCount - 1) まで

全オブジェクトを待っている場合には、すべてのオブジェクトがシグナル状態になり、その中に放棄されたためにシグナル状態になったミューテックスが含まれていることを示します。任意のオブジェクトを待っている場合、 (戻り値 - WAIT_ABANDONED) は、放棄されたためにシグナル状態になったミューテックスオブジェクトのハンドルの pHandles 配列内でのインデックスを示します。

0x00000102 (WAIT_TIMEOUT)

タイムアウト時間が経過したことを示します。

0xFFFFFFFF (WAIT_FAILED)

エラーが発生したことを示します。拡張エラー情報を取得するには、 GetLastError 関数を使います。

解説

この関数の pHandles パラメータが指す配列には、以下のオブジェクトのハンドルを指定することができます。

対応情報

Windows 95 以降 / Windows NT 3.1 以降