在指定的條件變數上休眠,並將指定的鎖定釋放為不可部分完成作業。
語法
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 為零,函式會測試指定物件的狀態,並立即傳回。 如果 dwMilliseconds 是 INFINITE,則函式的逾時間隔永遠不會過去。
[in] Flags
如果此參數 CONDITION_VARIABLE_LOCKMODE_SHARED,則 SRW 鎖定處於共用模式。 否則,鎖定會處於獨佔模式。
返回值
如果函式成功,則傳回值為非零值。
如果函式失敗,則傳回值為 0。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
如果逾時到期,函式會傳回 FALSE , 而 GetLastError 會傳回 ERROR_TIMEOUT。
備註
如果在呼叫此函式時解除鎖定,則函式行為未定義。
可以使用 WakeConditionVariable 或 WakeAllConditionVariable 函式喚醒執行緒。 執行緒喚醒之後,會重新取得執行緒進入睡眠狀態時釋放的鎖定。
條件變數會受到虛假喚醒 (與明確喚醒無關的喚醒) 和竊取喚醒 (另一個執行緒設法在喚醒執行緒之前執行) 的影響。 因此,您應該在睡眠作業傳回之後重新檢查述詞 (通常在迴圈中 while )。
需求
| 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 |