Асинхронный вызов ReadDirectoryChangesW()
может быть отменен функцией CancelIo()
. Однако, к тому времени, когда был вызван CancelIo()
, буфер уведомлений, связанный с ReadDirectoryChangesW()
, может быть заполнен наполовину. Вопрос в том, что происходит с этими уведомлениями? Должны ли они обрабатываться обычным способом?Отмена асинхронной команды ReadDirectoryChangesW
Более конкретно, я выпустил наложенную команду ReadDirectoryChangesW()
с процедурой завершения и отменял ее с помощью CancelIo()
. Когда моя процедура завершения вызывается с ошибкой ERROR_OPERATION_ABORTED
, должен ли я по-прежнему проверять буфер уведомлений на наличие возможных уведомлений?
Уточнение: Компонент «Слушатель файловой системы» успешно служит для моей компании уже более десяти лет. Теперь я собираюсь изменить компонент, чтобы реализовать более сложную политику мониторинга. В соответствии с этой политикой отмена конкретного запроса ReadDirectoryChangesW()
не означает отмены мониторинга, и я не хочу пропускать даже одно уведомление.
Действительно ли это имеет значение? Вы отменили мониторинг, а это значит, что вы больше этого не интересуетесь. Я бы просто полностью проигнорировал буфер и продолжил. –
@RemyLebeau, я отменил конкретный запрос, но не мониторинг, и я заинтересован в каждом уведомлении. Пожалуйста, уточните, что я добавил к вопросу. – Ilia
Опять же, почему это имеет значение? Если вы отмените * операцию * ввода/вывода *, вы сообщаете системе, что вам больше не нужна эта операция, поэтому вам не нужно беспокоиться о каких-либо буферизованных данных, которые могли быть сгенерированы, частично или иначе, до отмены. Почему вы заботитесь о частичных данных за то, что вы отменяете? Можете ли вы привести пример фактического использования? –