指定した条件変数をスリープ状態にし、指定したロックをアトミック操作として解放します。
構文
BOOL SleepConditionVariableSRW(
[in, out] PCONDITION_VARIABLE ConditionVariable,
[in, out] PSRWLOCK SRWLock,
[in] DWORD dwMilliseconds,
[in] ULONG Flags
);
パラメーター
[in, out] ConditionVariable
条件変数へのポインター。 この変数は 、InitializeConditionVariable を呼び出して初期化するか (構造体を動的に初期化する)、または構造体変数に定数CONDITION_VARIABLE_INITを割り当てる (構造体を静的に初期化する) 必要があります。
[in, out] SRWLock
ロックへのポインター。 このロックは、 Flags パラメーターで指定された方法で保持する必要があります。
[in] dwMilliseconds
タイムアウト間隔 (ミリ秒単位)。 この関数は、間隔が経過した場合に返されます。 dwMilliseconds が 0 の場合、関数は指定されたオブジェクトの状態をテストし、すぐに返します。 dwMilliseconds が INFINITE の場合、関数のタイムアウト間隔は経過しません。
[in] Flags
このパラメーターが CONDITION_VARIABLE_LOCKMODE_SHAREDの場合、SRW ロックは共有モードになります。 それ以外の場合、ロックは排他モードになります。
戻り値
関数が成功した場合、戻り値は 0 以外です。
関数が失敗した場合、戻り値は 0。 拡張エラー情報を取得するには、GetLastError
タイムアウトが切れると、関数はFALSEを返し、GetLastError はERROR_TIMEOUTを返します。
注釈
この関数の呼び出し時にロックが解除されると、関数の動作は未定義になります。
スレッドは、 WakeConditionVariable または WakeAllConditionVariable 関数を使用して起動できます。 スレッドが目覚めた後、スレッドがスリープ状態になったときに解放されたロックを再取得します。
条件変数は、スプリアス ウェイクアップ (明示的なウェイクアップに関連付けられていないもの) と盗まれたウェイクアップ (別のスレッドが起動スレッドの前に実行を管理) の対象となります。 そのため、スリープ操作が戻った後に述語 (通常は while ループ内) を再確認する必要があります。
Requirements
| Requirement | 価値 |
|---|---|
| サポートされる最小クライアント | Windows Vista [デスクトップ アプリ |UWP アプリ] |
| サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリ |UWP アプリ] |
| ターゲット プラットフォーム の | ウィンドウズ |
| Header | synchapi.h (Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |