Поделиться через


C28648

предупреждение C28648: PulseEvent является ненадежной функцией

Поток, ожидающий объекта синхронизации, можно на мгновение удалить из состояния ожидания с помощью APC в режиме ядра, а затем вернуться в состояние ожидания после завершения APC. Если вызов PulseEvent происходит в период, когда поток был удален из состояния ожидания, поток не будет освобожден и будет "зависать" навсегда. Это связано с тем, что PulseEvent освобождает только те потоки, которые ожидают на данный момент вызова.

Некоторые способы исправления использования PulseEvent:

  • Если требуется освободить только один из потоков, ожидающих события, и событие является событием сброса вручную, измените его на событие автоматического сброса и вызовите SetEvent вместо PulseEvent.

  • Если требуется освободить только один из потоков, ожидающих события, и событие является событием автоматического сброса, вызовите SetEvent вместо PulseEvent.

  • Если все потоки, ожидающие события, должны быть освобождены и событие является событием сброса вручную, измените код для использования другого типа объекта синхронизации (например, семафора).

  • Если все потоки, ожидающие события, должны быть освобождены и событие является событием автоматического сброса, вызовите SetEvent вместо PulseEvent (исходный вызов PulseEvent в любом случае выпускал только один поток).