SleepConditionVariableCS 関数 (synchapi.h)
指定した条件変数でスリープ状態になり、指定したクリティカル セクションをアトミック操作として解放します。
構文
BOOL SleepConditionVariableCS(
[in, out] PCONDITION_VARIABLE ConditionVariable,
[in, out] PCRITICAL_SECTION CriticalSection,
[in] DWORD dwMilliseconds
);
パラメーター
[in, out] ConditionVariable
条件変数へのポインター。 この変数は InitializeConditionVariable 関数を使用して初期化する必要があります。
[in, out] CriticalSection
クリティカル セクション オブジェクトへのポインター。 このクリティカル セクションは、 SleepConditionVariableCS の呼び出し時に呼び出し元が 1 回だけ入力する必要があります。
[in] dwMilliseconds
タイムアウト間隔 (ミリ秒単位)。 タイムアウト間隔が経過すると、関数はクリティカル セクションを再取得し、0 を返します。 dwMilliseconds が 0 の場合、関数は指定したオブジェクトの状態をテストし、すぐにを返します。 dwMilliseconds が INFINITE の場合、関数のタイムアウト間隔は経過しません。 詳細については、「解説」を参照してください。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合、またはタイムアウト間隔が経過した場合、戻り値は 0 になります。 詳細なエラー情報を得るには、GetLastError を呼び出します。 考えられるエラー コードには 、ERROR_TIMEOUTが含まれます。これは、別のスレッドがスリープ状態のスレッドのスリープ解除を試みる前にタイムアウト間隔が経過したことを示します。
注釈
WakeConditionVariable 関数または WakeAllConditionVariable 関数を使用して、指定したタイムアウト間隔が経過する前に、条件変数でスリープ状態になっているスレッドを起動できます。 この場合、スレッドは、スリープ解除処理が完了したときにスリープ解除され、タイムアウト間隔が経過した場合はスリープ解除されません。 スレッドが発生した後、スレッドがスリープ状態になったときに解放されたクリティカル セクションを再取得します。
条件変数は、誤ったウェイクアップ (明示的なウェイクアップに関連付けられていないもの) と盗難されたウェイクアップ (別のスレッドが起動スレッドの前に実行される管理) の影響を受けます。 したがって、スリープ操作が戻った後に述語 (通常は while
ループ内) を再確認する必要があります。
例
この関数を使用する例については、「 条件変数の使用」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | synchapi.h (Windows 7、Windows Server 2008 Windows Server 2008 R2 の場合は Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |