Асинхронные операции


Асинхронные операции дают возможность потоку выполнить отнимающую много времени операцию ввода-вывода (I/O) в фоновом режиме, оставляя поток свободным для выполнения других задач. Чтобы включить в работу асинхронные операции ввода-вывода на коммуникационном ресурсе, поток, когда дескриптор открывается, в функции CreateFile должен установить флажок FILE_FLAG_OVERLAPPED. Чтобы выполнить функцию ReadFile или WriteFile как асинхронную операцию, вызывающий поток должен установить указатель на структуру OVERLAPPED. Структура OVERLAPPED должна содержать дескриптор сброса вручную (не автоматического сброса) объекта события. Система устанавливает состояние объекта события в несигнальное, при вызове функции ввода - вывода (I/O), которая возвращает значение  перед завершением операции. Система устанавливает состояние объекта события в сигнальное, когда операция завершилась. Поток использует функцию ожидания, чтобы проверить текущее состояние объекта события или ждет, когда его состояние будет сигнальным.

Функции ReadFileEx и WriteFileEx могут выполняться только как асинхронные операции. Вызывающий поток устанавливает указатель на функцию FileIOCompletionRoutine, которая выполняется, когда завершается асинхронная операция. Стандартная процедура завершения выполняется только в том случае, если вызывающий поток выполняет предупреждающую операцию.

Дополнительную информацию об объектах события, функциях ожидания, ожидания в готовности  и о стандартных процедурах завершения смотри в главе Синхронизация.

Назад в оглавление
На главную страницу

Hosted by uCoz