C28648

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

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

修复 PulseEvent用法的一些方法:

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

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

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

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