在指定的条件变量上休眠,并将指定的锁释放为原子作。
Syntax
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 应用] |
| 目标平台 | Windows操作系统 |
| Header | synchapi.h (包括 Windows 7 上的 Windows.h、Windows Server 2008 Windows Server 2008 R2) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |