Sleep 関数 (synchapi.h)
タイムアウト間隔が経過するまで、現在のスレッドの実行を中断します。
アラート可能な待機状態を入力するには、 SleepEx 関数を使用します。
構文
void Sleep(
[in] DWORD dwMilliseconds
);
パラメーター
[in] dwMilliseconds
実行が中断される時間間隔 (ミリ秒単位)。
値が 0 の場合、スレッドはそのタイム スライスの残りの部分を、実行する準備ができている他のスレッドに放棄します。 実行する準備ができているスレッドが他に存在しない場合、関数は直ちにを返し、スレッドは実行を続行します。 Windows XP: 値が 0 の場合、スレッドはタイム スライスの残りの部分を、実行する準備ができている優先度が等しい他のスレッドに放棄します。 実行できる優先度が等しいスレッドが他に存在しない場合、関数は直ちにを返し、スレッドは実行を続行します。 この動作は、Windows Server 2003 以降で変更されました。
INFINITE の値は、中断がタイムアウトしないことを示します。
戻り値
なし
解説
この関数を使用すると、スレッドはタイム スライスの残りの部分を放棄し、 dwMilliseconds の値に基づいて一定の間隔で実行できなくなります。 システム クロックは、一定のレートで "ティック" します。 dwMilliseconds がシステム クロックの解像度より小さい場合、スレッドは、指定された時間未満でスリープ状態になる可能性があります。 dwMilliseconds が 1 ティックより大きく、2 未満の場合、待機は 1 ティックから 2 ティックまでの任意の場所にできます。 スリープ間隔の精度を高めるには、 timeGetDevCaps 関数を呼び出して、サポートされている最小タイマー解像度と timeBeginPeriod 関数を調べて、タイマーの解像度を最小値に設定します。 timeBeginPeriod を呼び出すときは注意が必要です。頻繁な呼び出しは、システム クロック、システム電源使用量、スケジューラに大きな影響を与える可能性があります。 timeBeginPeriod を呼び出す場合は、アプリケーションの早い段階で 1 回呼び出し、アプリケーションの最後で timeEndPeriod 関数を必ず呼び出してください。
スリープ間隔が経過すると、スレッドを実行する準備が整います。 0 ミリ秒を指定した場合、スレッドはタイム スライスの残りの部分を放棄しますが、準備は整ったままになります。 準備完了スレッドが直ちに実行されるとは限りません。 そのため、スリープ間隔が経過してからしばらくすると、スレッドが実行されない場合があります。 詳細については、「 スケジュールの優先順位」を参照してください。
次のシナリオで スリープ を使用する場合は注意してください。
- ウィンドウを直接または間接的に作成するコード (DDE や COM CoInitialize など)。 スレッドがウィンドウを作成する場合は、メッセージを処理する必要があります。 メッセージ ブロードキャストは、システム内のすべてのウィンドウに送信されます。 無限遅延の スリープ を使用するスレッドがある場合、システムはデッドロックします。
- コンカレンシー制御下にあるスレッド。 たとえば、I/O 完了ポートまたはスレッド プールでは、実行できる関連付けられたスレッドの数が制限されます。 スレッドの最大数が既に実行されている場合、実行中のスレッドが完了するまで、関連付けられている追加のスレッドを実行することはできません。 スレッドが 0 の間隔で Sleep を使用して、関連する追加のスレッドの 1 つが何らかの作業を実行するのを待機すると、プロセスがデッドロックする可能性があります。
Windows Phone 8.1: この関数は、Windows Phone 8.1 以降の Windows Phone ストア アプリでサポートされています。
Windows 8.1とWindows Server 2012 R2: この関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。
例
例については、「 スレッド ローカル ストレージの使用」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | synchapi.h (Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の場合は Windows.h を含む) |
Library | Kernel32.lib;Windows Phone 8.1 の WindowsPhoneCore.lib |
[DLL] | Kernel32.dll;Windows Phone 8.1 での KernelBase.dll |