C28648

advertencia C28648: PulseEvent es una función no confiable

Un subproceso que espera en un objeto de sincronización se puede quitar momentáneamente del estado de espera mediante un APC en modo kernel y, a continuación, volver al estado de espera una vez completado el APC. Si la llamada a PulseEvent se produce durante el período en el que se quitó el subproceso del estado de espera, el subproceso no se liberará y se "bloqueará" para siempre. Esto se debe a que PulseEvent libera solo los subprocesos que están esperando en el momento en que se llama.

Algunas de las formas de corregir el uso de PulseEvent:

  • Si solo uno de los subprocesos que esperan en el evento debe liberarse Y el evento es un evento de restablecimiento manual, cámbielo a un evento de restablecimiento automático y llame a SetEvent en lugar de PulseEvent.

  • Si solo uno de los subprocesos que esperan en el evento debe liberarse Y el evento es un evento de restablecimiento automático, llame a SetEvent en lugar de PulseEvent.

  • Si todos los subprocesos que esperan el evento deben liberarse Y el evento es un evento de restablecimiento manual, rediseñe el código para usar un tipo diferente de objeto de sincronización (como un semáforo).

  • Si todos los subprocesos que esperan el evento deben liberarse Y el evento es un evento de restablecimiento automático, llame a SetEvent en lugar de PulseEvent (la llamada original a PulseEvent estaba liberando solo un subproceso).