Самый простой способ чтения / записи файла асинхронно? - PullRequest
1 голос
/ 27 октября 2009

Я ищу простой способ асинхронного чтения / записи файла с использованием Win API. Я имел в виду, что это что-то вроде процедуры завершения асинхронного API Winsock (WSAxxx). Однако файловый API, похоже, не имеет их. Они где-то спрятаны?

Ожидание перекрывающихся событий в отдельном потоке добавляет накладные расходы на управление потоками, не говоря уже о том, что должен быть либо поток для файла, либо проблема 64 объектов. Завершение портов является излишним. Синхронное чтение файла в отдельном потоке не имеет значения.

Есть предложения?

Ответы [ 3 ]

1 голос
/ 27 октября 2009
Функции

CreateFile и ReadFile / WriteFile поддерживают так называемый «перекрывающийся» режим, который вам нужен. Также ReadFileEx / WriteFileEx работают только в асинхронном режиме.

Короче говоря, вам нужно открыть файл с флагом FILE_FLAG_OVERLAPPED и передать структуру OVERLAPPED (и обратный вызов в случае операций xxxEx) функциям доступа к файлу.

Вот пример класса для его использования.

0 голосов
/ 27 октября 2009

Как только вы вступаете на асинхронную территорию, вы должны забыть слово «самый простой» Серьезно, проще всего использовать .NET System.IO.FileStream с isAsync = true в конструкторе и методами BeginRead / EndRead.

0 голосов
/ 27 октября 2009

Я знаю, что в .net это возможно . То, что я не знаю, в какие функции win32 он отображает

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