Поделиться через


Структура 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