WaitForMultipleObjectsEx

指定したオブジェクトの一つまたはすべてがシグナル状態になるか、I/O 完了ルーチンや非同期プロシージャ呼び出し (APC) がスレッドにキューイングされるか、タイムアウト間隔が経過するまで待機する。

WaitForMultipleObjectsEx nCount, lpHandles, bWaitAll, dwMilliseconds, bAlertable

nCount : [int] lpHandles の配列で待機するオブジェクトハンドル数。最大は MAXIMUM_WAIT_OBJECTS。0 を指定できない。
lpHandles : [intptr] オブジェクトハンドルの配列。指定可能なオブジェクト種別は備考を参照。配列には異なる種別のハンドルを混在させてよい。同一ハンドルの複数コピーを含んではならない。
bWaitAll : [int] TRUE の場合、lpHandles 配列内のすべてのオブジェクトの状態がシグナル状態になったとき関数は戻る。FALSE の場合、いずれかのオブジェクトがシグナル状態になったとき戻る。後者の場合、戻り値は関数を戻らせた原因のオブジェクトを示す。
dwMilliseconds : [int] タイムアウト間隔(ミリ秒単位)。非ゼロを指定すると、関数は指定オブジェクトがシグナル状態になるか、I/O 完了ルーチン / APC がキューイングされるか、間隔が経過するまで待機する。0 を指定すると条件未満なら待機状態に入らず即座に戻る。INFINITE を指定するとシグナル状態か I/O 完了ルーチン / APC キューイングまで戻らない。Windows XP/Server 2003/Vista/7/Server 2008/Server 2008 R2 では低電力状態で過ごした時間も dwMilliseconds に含まれる (スリープ中もカウントダウン)。Windows 8/Server 2012/8.1/Server 2012 R2/10/Server 2016 では低電力状態で過ごした時間は含まれない (スリープ中はカウントダウンしない)。
bAlertable : [int] TRUE でスレッドが待機状態の場合、システムが I/O 完了ルーチンや APC をキューイングするとスレッドはそれを実行して関数が戻る。それ以外は戻らず実行もされない。完了ルーチンは ReadFileEx / WriteFileEx の完了時にキューイングされる。bAlertable が TRUE で、呼び出し側スレッドが読み書き操作を開始したスレッドである場合のみ、待機関数は戻り完了ルーチンが呼ばれる。APC は QueueUserAPC でキューイングされる。

(プラグイン / モジュール : kernel32.dll)

解説

指定したオブジェクトの一つまたはすべてがシグナル状態になるか、I/O 完了ルーチンや非同期プロシージャ呼び出し (APC)
がスレッドにキューイングされるか、タイムアウト間隔が経過するまで待機する。

[戻り値]
関数が成功した場合、戻り値は関数を戻らせた原因のイベントを示す。次のいずれかの値となる (WAIT_OBJECT_0 は
0、WAIT_ABANDONED_0 は 0x00000080L)。
(以下省略)

[備考]
WaitForMultipleObjectsEx
は待機条件が満たされたかを判定する。条件未充足なら、呼び出し側スレッドは条件充足またはタイムアウト経過まで待機状態に入る。bWaitAll
が TRUE
の場合、関数の待機操作はすべてのオブジェクト状態がシグナル状態になったときのみ完了する。すべてのオブジェクトがシグナル状態になるまで状態を変更しない。たとえばミューテックスがシグナル状態になっても、他のオブジェクトもシグナル状態になるまでスレッドはミューテックスの所有権を取得しない。その間に別のスレッドがミューテックスの所有権を取得して非シグナル状態にする可能性がある。bWaitAll
が FALSE の場合、本関数は配列内のハンドルをインデックス 0
から順にチェックし、いずれかのオブジェクトがシグナル状態になるまで続ける。複数オブジェクトが同時にシグナル状態になった場合、関数は配列内で最も小さいインデックスのハンドルを返す。本関数は同期オブジェクトの状態を変更する。状態変更は関数を戻らせた原因のオブジェクトに対してのみ行われる。たとえばセマフォオブジェクトのカウントは
1 減る。詳細は各同期オブジェクトのドキュメントを参照。MAXIMUM_WAIT_OBJECTS
を超えるハンドルを待機するには次の方法を使う。
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs