SleepEx

指定した条件が満たされるまで現在のスレッドを中断する。

SleepEx dwMilliseconds, bAlertable

dwMilliseconds : [int] 実行を中断する時間間隔(ミリ秒単位)。0 を指定するとスレッドは残りのタイムスライスを他の実行可能スレッドに譲る。他に実行可能スレッドがなければ即座に戻る。Windows XP では 0 を指定すると同等優先度の実行可能スレッドにのみ譲る動作だった。Windows Server 2003 以降で動作が変更された。INFINITE を指定するとタイムアウトしない。
bAlertable : [int] FALSE の場合、関数はタイムアウト期間が経過するまで戻らない。I/O 完了コールバックや APC が発生しても即座に戻らず、I/O 完了関数や APC 関数も実行されない。TRUE で、本関数を呼び出したスレッドが拡張 I/O 関数 (ReadFileEx または WriteFileEx) を呼び出したスレッドと同じ場合、関数はタイムアウト期間が経過するか I/O 完了コールバック関数が発生したときに戻る。I/O 完了コールバックが発生すると I/O 完了関数が呼ばれる。APC がキューイングされている場合 (QueueUserAPC)、関数はタイムアウト期間が経過するか APC 関数が呼ばれたときに戻る。

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

解説

指定した条件が満たされるまで現在のスレッドを中断する。

[戻り値]
指定時間間隔が経過した場合は 0 を返す。bAlertable が TRUE で、SleepEx を呼んだスレッドが拡張 I/O
関数を呼んだスレッドと同じ場合に I/O 完了コールバックにより戻った場合は WAIT_IO_COMPLETION を返す。

[備考]
本関数はスレッドに残りのタイムスライスを譲らせ、dwMilliseconds
に基づく時間だけ実行不能にする。スリープ間隔経過後、スレッドは実行可能となる。実行可能スレッドがすぐに実行される保証はなく、システムティック頻度や他プロセスの負荷に応じて任意の時間後に実行される。システムクロックは一定速度でティックする。スリープ間隔の精度を高めるには
timeGetDevCaps で最小タイマ分解能を取得し、timeBeginPeriod で最小に設定する。timeBeginPeriod
の頻繁な呼び出しはシステムクロック・電力使用・スケジューラに大きく影響するので注意する。timeBeginPeriod
を呼ぶ場合はアプリ早期に 1 度だけ呼び、終了時に必ず timeEndPeriod を呼ぶ。0
ミリ秒を指定するとスレッドは残りのタイムスライスを譲るが実行可能状態を保つ。詳細は Scheduling Priorities
を参照。本関数は ReadFileExWriteFileEx と組み合わせて、I/O
操作完了までスレッドを中断するために使える。これらの関数は I/O
完了時に実行する完了ルーチンを指定する。完了ルーチンが実行されるためには、I/O
関数を呼んだスレッドが完了コールバック発生時に警告可能待機状態にある必要がある。SleepExMsgWaitForMultipleObjectsExWaitForSingleObjectExWaitForMultipleObjectsEx
を bAlertable に TRUE で呼ぶことでスレッドは警告可能待機状態に入る。SleepEx は次のシナリオで使う際に注意。
(以下省略)

情報

プラグイン / モジュール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