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 の場合、関数は指定したオブジェクトの状態をテストし、すぐにを返します。 dwMillisecondsINFINITE の場合、関数のタイムアウト間隔は経過しません。

[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

関連項目

スリム リーダー/ライター (SRW) ロック

同期関数

VBS エンクレーブで使用できる Vertdll API