Compartilhar via


C28648

aviso C28648: PulseEvent é uma função não confiável

Um thread aguardando em um objeto de sincronização pode ser removido momentaneamente do estado de espera por um APC no modo kernel e, em seguida, retornado ao estado de espera após a conclusão do APC. Se a chamada para PulseEvent ocorrer durante o período em que o thread foi removido do estado de espera, o thread não será liberado e será "travado" para sempre. Isso ocorre porque o PulseEvent libera apenas os threads que estão aguardando no momento em que ele é chamado.

Algumas das maneiras de corrigir o uso do PulseEvent:

  • Se apenas um dos threads aguardando o evento precisar ser liberado E o evento for um evento de redefinição manual, altere-o para um evento de redefinição automática e chame SetEvent em vez de PulseEvent.

  • Se apenas um dos threads aguardando o evento precisar ser liberado E o evento for um evento de redefinição automática, chame SetEvent em vez de PulseEvent.

  • Se todos os threads aguardando o evento precisarem ser liberados E o evento for um evento de redefinição manual, reprojete seu código para usar um tipo diferente de objeto de sincronização (como um semáforo).

  • Se todos os threads que aguardam o evento precisarem ser liberados E o evento for um evento de redefinição automática, chame SetEvent em vez de PulseEvent (sua chamada original para PulseEvent estava liberando apenas um thread de qualquer maneira).