<Return[MN]><Top>

MsgWaitForMultipleObjects

Declare Function Api_MsgWaitForMultipleObjects& Lib "user32" Alias "MsgWaitForMultipleObjects" (ByVal nCount&, pHandles&, ByVal fWaitAll&, ByVal dwMilliseconds&, ByVal dwWakeMask&)

Declare Function MsgWaitForMultipleObjects Lib "user32" (ByVal nCount As Long, pHandles As Long, ByVal fWaitAll As Long, ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long

指定したオブジェクトのいずれか1つまたはすべてがシグナル状態になったとき、またはタイムアウト時間が経過したとき制御を戻す。

パラメータ
nCount
    pHandles が指す配列で指定するオブジェクトハンドルの数を指定する。

    オブジェクトハンドルの最大数は MAXIMUM_WAIT_OBJECTS - 1 である。
pHandles
    オブジェクトハンドルの配列へのポインタを指定する。種類の異なるオブジェクトを同時に指定することができる。
    Windows NT:ハンドルには SYNCHRONIZE アクセス権が必要である。
    Windows 95:DuplicateHandle で作成した複製とそのオリジナルのハンドルを同時に指定することはできない。
fWaitAll
    待機方法を指定する。TRUE を指定すると、入力イベントを含む、pHandles が指す配列に含まれるすべてのオブジェクトがシグナル状態に

    なったときに制御が戻る。FALSE を指定すると、いずれか 1 つのオブジェクトがシグナル状態になったときに制御が戻る。

    FALSE を指定した場合は、どのオブジェクトの状態によって制御が戻ったかが戻り値によって示される。
dwMilliseconds
    タイムアウト時間をミリ秒単位で指定する。この時間が経過すると、fWaitAll または dwWakeMask で指定する基準を満たしていなくても制

    御が戻る。dwMilliseconds に 0 を指定すると、指定したオブジェクトの状態がテストされた後、ただちに制御が戻る。

    INFINITE を指定すると、指定した基準が満たされるまで制御が戻らない。
dwWakeMask
    オブジェクトハンドルの配列に加えられる入力イベントオブジェクトの種類を指定する。次の定数を組み合わせて指定する。

    定数                                                    

意味                                                                                                               

    QS_ALLEVENTS

 

入力メッセージ、WM_TIMER メッセージ、WM_PAINT メッセージ、WM_HOTKEY

 メッセージ、ポストされたメッセージのいずれか

    QS_ALLINPUT

すべてのメッセージ

    QS_ALLPOSTMESSAGE

ポストされたメッセージ(この表に示すメッセージを除く)

    QS_HOTKEY WM_HOTKEY

メッセージ

    QS_INPUT

入力メッセージ

    QS_KEY WM_KEYUP

 

メッセージ、WM_KEYDOWN メッセージ、WM_SYSKEYUP メッセージ、

WM_SYSKEYDOWN メッセージのいずれか

    QS_MOUSE WM_MOUSEMOVE

 

メッセージまたはマウスボタンメッセージ

(WM_LBUTTONUP、WM_RBUTTONDOWN など)

    QS_MOUSEBUTTON

マウスボタンメッセージ(WM_LBUTTONUP、WM_RBUTTONDOWN など)

    QS_MOUSEMOVE WM_MOUSEMOVE

メッセージ

    QS_PAINT WM_PAINT

メッセージ

    QS_POSTMESSAGE

ポストされたメッセージ(この表に示すメッセージを除く)

    QS_SENDMESSAGE

別のスレッドまたはアプリケーションが送信したメッセージ

    QS_TIMER WM_TIMER

メッセージ


戻り値
    関数が成功すると、関数が制御を戻す条件を満たしたイベントを示す値が返る。成功時の戻り値は、次のいずれかになる。

    定数                         

意味                                               

    WAIT_OBJECT_0 〜 (WAIT_OBJECT_0 + nCount - 1)

 

fWaitAll に TRUE を指定した場合は、指定したすべてのオブジェクトがシグナル状態になっている。

fWaitAll に FALSE を指定した場合は、戻り値から WAIT_OBJECT_0 を引いた値が、関数が制御を戻す条件を

満たしたオブジェクトの、pHandles が指す配列でのインデックスである。

    WAIT_OBJECT_0 + nCount

 

dwWakeMask で指定した種類の新しい入力がスレッドの入力キーにある。PeekMessage、GetMessage、

WaitMessage、MsgWaitForMultipleObjects、MsgWaitForMultipleObjectsEx などの関数は、キューにある

メッセージに“古いメッセージ”のマークを付ける。したがって、これらの関数の 1 つを呼び出した後に

MsgWaitForMultipleObjects 関数を呼び出すと、指定した種類の新しい入力が届くまで制御が戻らない。
この値は、フォアグラウンドアクティベーションなど、スレッドのアクションを必要とするシステムイベントが発生したとき

にも返る。そのため、対応する入力がない場合でも、また dwWaitMask に 0 を指定した場合でも、

MsgWaitForMultipleObjects 関数から制御が戻ることがある。その場合は、PeekMessage 関数または

GetMessage 関数を使ってシステムイベントを処理した後、MsgWaitForMultipleObjects 関数をもう一度呼び出

す。

    WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 + nCount - 1)

 

fWaitAll に TRUE を指定した場合は、指定したすべてのオブジェクトがシグナル状態で、オブジェクトの少なくと

も 1 つが放棄されたミューテックスオブジェクトである。fWaitAll に FALSE を指定した場合は、戻り値から

WAIT_ABANDONED_0 を引いた値が、関数が制御を戻す条件を満たした放棄されたニューテックスオブジェクト

の、pHandles が指す配列でのインデックスである。

    WAIT_TIMEOUT

fWaitAll と dwWakeMask で指定した条件が満たされる前にタイムアウトになった。

    関数が失敗すると、0xFFFFFFFF が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。