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


C28648

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

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

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

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

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

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

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