Одна из вещей, которые мне действительно нравятся в Windows API - это перекрывающийся ввод-вывод. Я написал десятки сетевых серверов, используя перекрывающиеся операции ввода-вывода (как для сокетов, так и для файлов) с ограниченным числом потоков. Я также пишу драйверы, так что хорошо знаю, как осуществляется параллельный ввод-вывод "за кулисами".
Единственное, что меня всегда беспокоило, это то, что некоторые функции API не поддерживают режим перекрытия. Например, создание файла (то есть вызов CreateFile
) всегда работает синхронно. Это жаль, потому что эти методы могут поддерживать перекрывающийся (асинхронный) режим. Например, когда файл создается (или открывается) - драйвер файловой системы получает запрос IRP_MJ_CREATE
, для которого он может (и обычно делает) возвращать STATUS_PENDING
.
У меня вопрос: есть ли возможность открыть файл асинхронно? (но, пожалуйста, не говорите мне, чтобы создать другой поток, чтобы открыть файл).