SleepConditionVariableCS 函数 (synchapi.h)

在指定的条件变量上睡眠,并将指定的关键节作为原子作释放。

Syntax

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 时,调用方必须准确输入此关键部分一次。

[in] dwMilliseconds

超时间隔(以毫秒为单位)。 如果超时间隔已过,该函数将重新获取关键节并返回零。 如果 dwMilliseconds 为零,则函数将测试指定对象的状态并立即返回。 如果 dwMillisecondsINFINITE,则函数的超时间隔永远不会过去。 有关详细信息,请参阅“备注”。

返回值

如果函数成功,则返回值为非零。

如果函数失败或超时间隔已过,则返回值为零。 若要获取扩展的错误信息,请调用 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

另请参阅

条件变量

同步函数

VBS enclave 中提供的 Vertdll API