C28648
Warnung C28648: PulseEvent ist eine unzuverlässige Funktion
Ein Thread, der auf ein Synchronisierungsobjekt wartet, kann von einem Kernelmodus-APC vorübergehend aus dem Wartezustand entfernt und nach Abschluss des APC in den Wartezustand zurückgegeben werden. Wenn der Aufruf von PulseEvent während des Zeitraums auftritt, in dem der Thread aus dem Wartezustand entfernt wurde, wird der Thread nicht freigegeben und "hängt" für immer. Dies liegt daran, dass PulseEvent nur die Threads freigibt, die zum Zeitpunkt des Aufrufs warten.
Einige Der Möglichkeiten, die Verwendung von PulseEvent zu beheben:
Wenn nur einer der Threads, die auf das Ereignis warten, freigegeben werden muss UND es sich bei dem Ereignis um ein ereignis manuelles Zurücksetzen handelt, ändern Sie es in ein Ereignis mit automatischem Zurücksetzen, und rufen Sie SetEvent anstelle von PulseEvent auf.
Wenn nur einer der Threads, die auf das Ereignis warten, freigegeben werden muss UND das Ereignis ein Ereignis mit automatischem Zurücksetzen ist, rufen Sie SetEvent anstelle von PulseEvent auf.
Wenn alle Threads, die auf das Ereignis warten, freigegeben werden müssen UND es sich bei dem Ereignis um ein Ereignis mit manueller Zurücksetzung handelt, müssen Sie Den Code so neu gestalten, dass er ein anderes Synchronisierungsobjekt (z. B. ein Semaphor) verwendet.
Wenn alle Threads, die auf das Ereignis warten, freigegeben werden müssen UND das Ereignis ein Ereignis mit automatischer Zurücksetzung ist, rufen Sie SetEvent anstelle von PulseEvent auf (Ihr ursprünglicher Aufruf von PulseEvent hat ohnehin nur einen Thread veröffentlicht).