次の方法で共有


SleepConditionVariableCS 関数 (synchapi.h)

指定した条件変数をスリープ状態にし、指定したクリティカル セクションをアトミック操作として解放します。

構文

BOOL SleepConditionVariableCS(
  [in, out] PCONDITION_VARIABLE ConditionVariable,
  [in, out] PCRITICAL_SECTION   CriticalSection,
  [in]      DWORD               dwMilliseconds
);

パラメーター

[in, out] ConditionVariable

条件変数へのポインター。 この変数は 、InitializeConditionVariable を呼び出して初期化するか (構造体を動的に初期化する)、または構造体変数に定数CONDITION_VARIABLE_INITを割り当てる (構造体を静的に初期化する) 必要があります。

[in, out] CriticalSection

クリティカル セクション オブジェクトへのポインター。 このクリティカル セクションは、 SleepConditionVariableCS が呼び出されるときに呼び出し元が 1 回だけ入力する必要があります。

[in] dwMilliseconds

タイムアウト間隔 (ミリ秒単位)。 タイムアウト間隔が経過すると、関数はクリティカル セクションを再取得し、0 を返します。 dwMilliseconds が 0 の場合、関数は指定されたオブジェクトの状態をテストし、すぐに返します。 dwMillisecondsINFINITE の場合、関数のタイムアウト間隔は経過しません。 詳細については、「解説」を参照してください。

戻り値

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、またはタイムアウト間隔が経過した場合、戻り値は 0 になります。 拡張エラー情報を取得するには、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

こちらも参照ください

条件変数

同期関数の

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