C28648

警告 C28648:PulseEvent 是不可靠的函数

等待同步对象的线程可以通过内核模式 APC 暂时从等待状态中删除,然后在 APC 完成后返回到等待状态。 如果在线程从等待状态中删除期间调用 PulseEvent ,则不会释放线程,并且将永久“挂起”。 这是因为 PulseEvent 仅释放调用它时正在等待的那些线程。

修复 PulseEvent 用法的一些方法:

  • 如果只需要释放等待事件的一个线程,并且该事件是手动重置事件,请将其更改为自动重置事件,并调用 SetEvent 而不是 PulseEvent

  • 如果只需要释放等待事件的一个线程,并且该事件是自动重置事件,请调用 SetEvent 而不是 PulseEvent

  • 如果需要释放等待事件的所有线程,并且该事件是手动重置事件,请重新设计代码以使用不同类型的同步对象 (,例如信号灯) 。

  • 如果需要释放等待事件的所有线程,并且该事件是自动重置事件,请调用 SetEvent 而不是 PulseEvent , (对 PulseEvent 的原始调用) 只释放一个线程。