Что CancelIo () делает с байтами, которые уже были прочитаны? - PullRequest
1 голос
/ 06 августа 2009

Что произойдет, если я ReadFile() 10 байт (в режиме перекрытия без тайм-аута), но вызову CancelIo() после прочтения 5 байт? В документации для CancelIo() говорится, что она отменяет любые ожидающие операции ввода-вывода, но что происходит с уже прочитанными 5 байтами? Они потерялись? Они повторно поставлены в очередь, поэтому в следующий раз я ReadFile() получу их снова?

Я ищу спецификацию, чтобы указать так или иначе. Я не хочу полагаться на эмпирические данные.

Ответы [ 2 ]

3 голосов
/ 07 августа 2009

Согласно http://groups.google.ca/group/microsoft.public.win32.programmer.kernel/browse_thread/thread/4fded0ac7e4ecfb4?hl=en

Зависит от того, как пишущий драйвер реализовал устройство. Точный семантика отмены операции не определена до этого уровня.

0 голосов
/ 19 августа 2009

Либо это не имеет значения, потому что вы используете перекрывающийся ввод-вывод, либо вы можете просто позвонить SetFilePointer вручную, когда узнаете, что отменили ввод-вывод.

Вам не нужно полагаться на недокументированное поведение, если вы просто форсируете проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...