Condividi tramite


C28648

avviso C28648: PulseEvent è una funzione non affidabile

Un thread in attesa su un oggetto di sincronizzazione può essere rimosso momentaneamente dallo stato di attesa da un APC in modalità kernel e quindi restituito allo stato di attesa dopo il completamento dell'APC. Se la chiamata a PulseEvent si verifica durante il periodo in cui il thread è stato rimosso dallo stato di attesa, il thread non verrà rilasciato e "si blocca" per sempre. Il motivo è che PulseEvent rilascia solo i thread in attesa al momento della chiamata.

Alcuni dei modi per correggere l'uso di PulseEvent:

  • Se è necessario rilasciare solo uno dei thread in attesa dell'evento e l'evento è un evento di reimpostazione manuale, modificarlo in un evento di reimpostazione automatica e chiamare SetEvent anziché PulseEvent.

  • Se è necessario rilasciare solo uno dei thread in attesa dell'evento e l'evento è un evento di reimpostazione automatica, chiamare SetEvent anziché PulseEvent.

  • Se tutti i thread in attesa dell'evento devono essere rilasciati e l'evento è un evento di reimpostazione manuale, riprogettare il codice in modo da usare un tipo diverso di oggetto di sincronizzazione, ad esempio un semaforo.

  • Se tutti i thread in attesa dell'evento devono essere rilasciati e l'evento è un evento di reimpostazione automatica, chiama SetEvent anziché PulseEvent (la chiamata originale a PulseEvent stava rilasciando comunque un solo thread).