Структура OVERLAPPED (shobjidl.h)
Содержит сведения, используемые в асинхронных (перекрывающихся) ввода-выводах.
Синтаксис
typedef struct _OVERLAPPED {
ULONG_PTR Internal;
ULONG_PTR InternalHigh;
union {
struct {
DWORD Offset;
DWORD OffsetHigh;
};
PVOID Pointer;
};
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;
Члены
Internal
Тип: ULONG_PTR
Зарезервировано для использования операционной системой. Этот элемент, указывающий состояние, зависящее от системы, действителен, когда функция IStreamAsync::OverlappedResult возвращает без установки расширенных сведений об ошибке ERROR_IO_PENDING.
InternalHigh
Тип: ULONG_PTR
Зарезервировано для использования операционной системой. Этот элемент, указывающий длину передаваемых данных, является допустимым, когда функция IStreamAsync::OverlappedResult возвращает значение TRUE.
Offset
Тип: DWORD
Позиция файла, с которой следует начать передачу. Позиция в файле — это смещение в байтах от начала файла. Вызывающий процесс должен задать этот член перед вызовом функции IStreamAsync::ReadAsync или IStreamAsync::WriteAsync .
OffsetHigh
Тип: DWORD
Слово высокого порядка для позиции файла, с которой начинается передача.
Pointer
Тип: PVOID
Зарезервировано.
hEvent
Тип: дескриптор
Обработка события, для которого устанавливается состояние сигнала после завершения операции. Перед вызовом перекрывающихся функций вызывающий процесс должен задать для этого элемента значение 0 или допустимый дескриптор событий. Чтобы создать объект события, используйте функцию CreateEvent . Эта функция возвращает дескриптор, который можно использовать для синхронизации одновременных запросов ввода-вывода для устройства.
Такие функции, как IStreamAsync::ReadAsync и IStreamAsync::WriteAsync , устанавливают для этого дескриптора состояние без знака перед началом операции ввода-вывода. После завершения операции дескриптор получает состояние сигнального.
Такие функции, как IStreamAsync::OverlappedResult и функции ожидания, сбрасывают события автоматического сброса до состояния без знака. Таким образом, если используется событие автоматического сброса, приложение может перестать отвечать, если оно ожидает завершения операции, а затем вызывает IStreamAsync::OverlappedResult.
Комментарии
Эта структура всегда должна быть инициализирована до нуля, прежде чем она будет использоваться в вызове функции. Если это не так, функция может завершиться ошибкой и вернуть ERROR_INVALID_PARAMETER.
Используйте функцию IStreamAsync::CancelIo , чтобы отменить асинхронную операцию ввода-вывода.
Распространенной ошибкой является повторное использование структуры OVERLAPPED до завершения предыдущей асинхронной операции. Используйте отдельную структуру для каждого запроса. Создайте объект события для каждого потока, обрабатывающего данные.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Верхняя часть | shobjidl.h |