WaitForMultipleObjects

機能
複数のオブジェクトがシグナル状態になるか、一定時間を経過するまで待機する
Declare Function WaitForMultipleObjects Lib "kernel32.dll"  _
(ByVal nCount As Long, lpHandles As Long, ByVal bWaitAll As Long, _
ByVal dwMilliseconds As Long) As Long
Declare Function WaitForMultipleObjects Lib "kernel32.dll"  _
(ByVal nCount As Integer, lpHandles As Integer, ByVal bWaitAll As Integer, _
ByVal dwMilliseconds As Integer) As Integer

DWORD WaitForMultipleObjects(
DWORD nCount,
CONST HANDLE *lpHandles,
BOOL fWaitAll,
DWORD dwMilliseconds
);
引数
nCount

lpHandlesの要素数(最大値はMAXIMUM_WAIT_OBJECTS(=64))
lpHandles
オブジェクトのハンドルを格納する配列
DuplicateHandle()関数を使ってコピーしたハンドルを指定することはできない
bWaitAll
関数へ戻るときの動作方法を指定するフラッグ

すべてのオブジェクトが終了したとき     1
いずれかのオブジェクトが終了したとき    0
dwMilliseconds
タイムアウト時間(ミリ秒)

INFINITE(=&HFFFFFFFF)のとき、オブジェクトハンドルが終了するまで待つ。
0のとき、オブジェクトの状態をチェックしただけですぐに関数は戻る。
値を設定したときは、関数はタイムアウト時間を経過した段階で戻る。
戻り値
正常終了のとき        正常終了を表す定数
エラーのとき         WAIT_FAILED(=&HFFFFFFFF)
備考
この関数はオブジェクトのハンドルが終了するのを待つ関数である。
WaitForSingleObject()関数はシングルオブジェクトのハンドルだけだが
この関数は複数のオブジェクトハンドルが制御できる(同期できる)。

この関数が有効なオブジェクトは以下の通り。
ファイルの変更通知     コンソールの入力       イベント
ミューテックス       プロセス           スレッド
セマフォ          タイマ
戻り値の定数
WAIT_OBJECT_0(=&H0)〜                    bWaitAllが1のとき、全てのオブジェクトがシグナル状態である

WAIT_OBJECT_0+nCount-1                   bWaitAllが0のとき、待機条件を満たしたオブジェクトの
                     配列内のインデックス

WAIT_ABANDONED_0(=&H80)                  bWaitAllが1のとき、すべてのオブジェクトは
                     シグナル状態にあり、少なくとも、そのうちの一つは
                     破棄されたミューデックスオブジェクトである

WAIT_ABANDONED_0+nCount-1                bWaitAllが0のとき、待機条件を満たした
                     ミューテックスオブジェクトの配列内のインデックス

WAIT_TIMEOUT(=&H102)                     タイムアウト時間が経過した
                     (bWaitAllで指定した条件を満足したかどうかは不明)