等待指定对象处于信号状态或超时间隔已过。
若要输入可警报的等待状态,请使用
WaitForSingleObjectEx
函数。 若要等待多个对象,请使用
WaitForMultipleObjects
。
DWORD WaitForSingleObject(
[in] HANDLE hHandle,
[in] DWORD dwMilliseconds
[in] hHandle
对象的句柄。 有关可以指定句柄的对象类型的列表,请参阅以下“备注”部分。
如果等待仍在等待时关闭此句柄,则函数的行为未定义。
句柄必须具有 SYNCHRONIZE 访问权限。 有关详细信息,请参阅 标准访问权限。
[in] dwMilliseconds
超时间隔(以毫秒为单位)。 如果指定了非零值,该函数将等待对象发出信号或间隔。 如果 dwMilliseconds 为零,则如果对象未发出信号,则函数不会输入等待状态;它始终会立即返回。 如果 dwMilliseconds 为 INFINITE,则仅当发出对象信号时,该函数才会返回。
Windows XP、Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 和 Windows Server 2008 R2: dwMilliseconds 值确实包括用于低功率状态的时间。 例如,当计算机处于睡眠状态时,超时会不断倒计时。
Windows 8、Windows Server 2012、Windows 8.1、Windows Server 2012 R2、Windows 10和Windows Server 2016:dwMilliseconds 值不包括在低功率中花费的时间国家。 例如,当计算机处于睡眠状态时,超时不会不断倒计时。
如果函数成功,则返回值指示导致函数返回的事件。 可以是下列值之一。
返回代码/值
WaitForSingleObject 函数检查指定对象的当前状态。 如果对象的状态未对齐,则调用线程将进入等待状态,直到发出该对象信号或超时间隔。
该函数修改某些类型的同步对象的状态。 修改仅适用于指示状态导致函数返回的对象。 例如,信号灯对象的计数减少一个。
WaitForSingleObject 函数可以等待以下对象:
控制台输入
内存资源通知
Mutex
Semaphore
可等待计时器
调用直接或间接创建窗口的等待函数和代码时,请谨慎使用。 如果线程创建任何窗口,则必须处理消息。 消息广播将发送到系统中的所有窗口。 使用无超时间隔的等待函数的线程可能会导致系统陷入死锁。 间接创建窗口的代码的两个示例是 DDE 和 CoInitialize 函数。 因此,如果你有创建窗口的线程,请使用 MsgWaitForMultipleObjects 或 MsgWaitForMultipleObjectsEx,而不是 WaitForSingleObject。
有关示例,请参阅 使用互斥体对象。
synchapi.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)
Library
Kernel32.lib
Kernel32.dll
Wait 函数