pulseEvent 函数 (winbase.h)

将指定的事件对象设置为信号状态,然后在释放适当数量的等待线程后将其重置为未对齐状态。

注意 此函数不可靠,不应使用。 它的存在主要是为了向后兼容。 有关详细信息,请参阅“备注”。
 

语法

BOOL PulseEvent(
  [in] HANDLE hEvent
);

参数

[in] hEvent

事件对象的句柄。 CreateEventOpenEvent 函数返回此句柄。

句柄必须具有EVENT_MODIFY_STATE访问权限。 有关详细信息,请参阅 Synchronization Object Security and Access Rights

返回值

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

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

等待同步对象的线程可由内核模式 APC 暂时从等待状态中删除,然后在 APC 完成后返回到等待状态。 如果在从等待状态中删除线程期间发生对 PulseEvent 的调用,则不会释放该线程,因为 PulseEvent 仅释放在调用它时正在等待的那些线程。 因此, PulseEvent 不可靠,不应由新应用程序使用。 请改用 条件变量

对于手动重置事件对象,将释放可立即释放的所有等待线程。 然后,该函数将事件对象的状态重置为未签名并返回。

对于自动重置事件对象,函数会将状态重置为未签名,并在释放单个等待线程后返回,即使多个线程正在等待也是如此。

如果没有线程在等待,或者没有线程可以立即释放, PulseEvent 只需将事件对象的状态设置为未签名并返回。

请注意,对于使用多对象 等待函数 等待所有指定对象收到信号的线程, PulseEvent 可以将事件对象的状态设置为已发出信号,并将其重置为非信号,而不会导致等待函数返回。 如果并非所有指定的对象都同时发出信号,则会发生此情况。

在 Windows 7 中使用 SignalObjectAndWaitPulseEvent 时,请格外小心,因为在多个线程之间使用这些 API 可能会导致应用程序死锁。 由 SignalObjectAndWait 发出信号的线程调用 PulseEvent,以向 SignalObjectAndWait 调用的等待对象发出信号。 在某些情况下, SignalObjectAndWait 的调用方无法及时接收等待对象的信号状态,从而导致死锁。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CreateEvent

事件对象

OpenEvent

ResetEvent

SetEvent

同步函数