Структура 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, HasOverlappedIoCompleted, ReadFile, 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 |
- |
|
Замечания по платформе |
Не имеется |