Функция GetOverlappedResult (ioapiset.h)
Извлекает результаты перекрывающейся операции с указанным файлом, именованным каналом или устройством связи. Чтобы указать интервал времени ожидания или ожидать оповещенного потока, используйте getOverlappedResultEx.
Синтаксис
BOOL GetOverlappedResult(
[in] HANDLE hFile,
[in] LPOVERLAPPED lpOverlapped,
[out] LPDWORD lpNumberOfBytesTransferred,
[in] BOOL bWait
);
Параметры
[in] hFile
Дескриптор файла, именованного канала или устройства связи. Это тот же дескриптор, который был указан при запуске перекрывающейся операции вызовом любой из следующих функций:
- ReadFile
- WriteFile
- ConnectNamedPipe
- TransactNamedPipe
- DeviceIoControl
- WaitCommEvent
- ReadDirectoryChangesW
- LockFileEx
[in] lpOverlapped
Указатель на структуру OVERLAPPED , указанную при запуске перекрывающейся операции.
[out] lpNumberOfBytesTransferred
Указатель на переменную, получающую количество байтов, которые были фактически переданы операцией чтения или записи. Для операции TransactNamedPipe это количество байтов, считанных из канала. Для операции DeviceIoControl это количество байтов выходных данных, возвращаемых драйвером устройства. Для операции ConnectNamedPipe или WaitCommEvent это значение не определено.
[in] bWait
Если этот параметр имеет значение TRUE, а элемент Internal структуры lpOverlappedSTATUS_PENDING, функция не возвращается до завершения операции. Если этот параметр имеет значение FALSE и операция по-прежнему находится в состоянии ожидания, функция возвращает значение FALSE , а функция GetLastError возвращает ERROR_IO_INCOMPLETE.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Результаты, сообщаемые функцией GetOverlappedResult , являются результатами последней перекрывающейся операции указанного дескриптора, для которой была предоставлена указанная структура OVERLAPPED и для которой результаты операции находились в ожидании. Ожидающая операция указывается, когда функция, которая запустила операцию, возвращает значение FALSE, а функция GetLastError возвращает ERROR_IO_PENDING. При ожидании операции ввода-вывода функция, которая запустила операцию, сбрасывает элемент hEvent структуры OVERLAPPED в состояние без знака. После завершения ожидающей операции система устанавливает для объекта события состояние сигнала.
Если параметр bWait имеет значение TRUE, Метод GetOverlappedResult определяет, была ли завершена ожидающая операция, ожидая, пока объект события будет находиться в состоянии сигнала.
Если элемент hEvent структуры OVERLAPPED имеет значение NULL, система использует состояние дескриптора hFile , чтобы сообщить о завершении операции. Использование файлов, именованных каналов или дескрипторов устройств связи для этой цели не рекомендуется. Безопаснее использовать объект события из-за путаницы, которая может возникнуть при выполнении нескольких одновременных перекрывающихся операций в одном файле, именованном канале или устройстве связи. В этом случае невозможно узнать, какая операция вызвала сигнал о состоянии объекта.
Примеры
Пример использования GetOverlappedResult см. в разделе Тестирование конца файла.
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | ioapiset.h (включает Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |
См. также
CancelIo, CreateEvent, GetOverlappedResultEx, OVERLAPPED, Overlapped Input and Output, Synchronization Functions