SleepConditionVariableSRW 関数 (synchapi.h)
指定した条件変数でスリープ状態になり、指定したロックをアトミック操作として解放します。
構文
BOOL SleepConditionVariableSRW(
[in, out] PCONDITION_VARIABLE ConditionVariable,
[in, out] PSRWLOCK SRWLock,
[in] DWORD dwMilliseconds,
[in] ULONG Flags
);
パラメーター
[in, out] ConditionVariable
条件変数へのポインター。 この変数は InitializeConditionVariable 関数を使用して初期化する必要があります。
[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
ループ内) を再確認する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | 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 |