Структура OVERLAPPED


Структура OVERLAPPED содержит информацию, используемую в асинхронном (или перекрывающем) вводе  и выводе данных (I/O).

Синтаксис

typedef struct _OVERLAPPED {
  ULONG_PTR Internal;
  ULONG_PTR InternalHigh;
  DWORD Offset;
  DWORD OffsetHigh;
  HANDLE hEvent;
} OVERLAPPED;

Члены структуры

Internal

Зарезервирован для использования операционной системой. Этот член структуры, который определяет системно-зависимое состояние, правильный тогда, когда функция GetOverlappedResult возвращает значение  ERROR_IO_PENDING без установки дополнительной информации об ошибке.

InternalHigh

Зарезервирован для использования операционной системой. Этот член структуры, который устанавливает длину переданных данных, правильный тогда, когда функция GetOverlappedResult возвращений значение  TRUE.

Offset

Местоположение файла, в котором начинается передача. Позиция файла - это смещение байта от начала файла. Вызывающий процесс должен установить этот член структуры перед вызовом функции WriteFile или ReadFile.

Этот член структуры используется только тогда, когда устройство - файл. В противном случае, этот член структуры должен быть нуль.

OffsetHigh

Старшее слово позиции файла, в который начинается передача.

Этот член структуры используется только тогда, когда устройство - файл. В противном случае, этот член структуры должен быть нуль.

hEvent

Дескриптор события, которые должно быть установлено в сигнальное состояние, когда операция завершилась. Вызывающий процесс должен установить в этом члене структуры или нуль, или допустимый дескриптор события перед вызовом любых перекрывающих функций. Чтобы создать объект события, используйте функцию CreateEvent. Эта функция возвращает дескриптор, который может быть использован, чтобы синхронизировать одновременные запросы ввода - вывода (I/O) к устройству.

Функции типа ReadFile и WriteFile устанавливают этот дескриптор в несигнальное состояние прежде, чем они начинают операцию ввода-вывода (I/O). Когда операция завершается, дескриптор устанавливается в сигнальное состояние.

Функции типа GetOverlappedResult и функции ожидания сбрасывают  автосброс событий в несигнальное состояние. Поэтому, если Вы используете  автосброс события, ваше приложение может зависнуть, если Вы ожидаете операцию завершения, чтобы затем вызвать функцию GetOverlappedResult.

Замечания

Эта структура должна всегда инициализироваться нулями прежде, чем она используется в вызове функции. Если этого не сделать, функция может завершить ошибкой и возвратить значение ERROR_INVALID_PARAMETER.

Вы можете использовать макрос HasOverlappedIoCompleted, чтобы выяснить, завершилась ли асинхронная операция ввода-вывода (I/O). Вы можете использовать функцию CancelIo, чтобы отменить асинхронную операцию ввода-вывода (I/O).

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

Код примера

Пример, см. в статье Сервер именованного канала, использующий асинхронную операцию ввода-вывода (I/O).

Смотри также 

Обзор Синхронизация, Структуры, используемые в синхронизации, CancelIo , GetOverlappedResult, HasOverlappedIoCompletedReadFile, WriteFile

Размещение и совместимость OVERLAPPED

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Да

е

Windows Me

Да

н

Windows 98

Да

т

Windows 95

Да

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Да
в    
е    
р    

Используемая библиотека

-

Используемая DLL -
 Заголовочный файл  

- объявлено в

Winbase.h

 - включено в

Windows.h

 Unicode

-

 Замечания по платформе

Не имеется

 

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

Hosted by uCoz