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


Функция GetQueuedCompletionStatus (ioapiset.h)

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

Чтобы вывести из очереди несколько пакетов завершения ввода-вывода одновременно, используйте функцию GetQueuedCompletionStatusEx .

Синтаксис

BOOL GetQueuedCompletionStatus(
  [in]  HANDLE       CompletionPort,
        LPDWORD      lpNumberOfBytesTransferred,
  [out] PULONG_PTR   lpCompletionKey,
  [out] LPOVERLAPPED *lpOverlapped,
  [in]  DWORD        dwMilliseconds
);

Параметры

[in] CompletionPort

Дескриптор для порта завершения. Чтобы создать порт завершения, используйте функцию CreateIoCompletionPort .

lpNumberOfBytesTransferred

Указатель на переменную, которая получает количество байтов, переданных в ходе завершенной операции ввода-вывода.

[out] lpCompletionKey

Указатель на переменную, которая получает значение ключа завершения, связанное с дескриптором файла, операция ввода-вывода которого завершена. Ключ завершения — это ключ для каждого файла, который указывается в вызове CreateIoCompletionPort.

[out] lpOverlapped

Указатель на переменную, получающую адрес структуры OVERLAPPED , указанный при запуске завершенной операции ввода-вывода.

Даже если вы передали функции дескриптор файла, связанный с портом завершения, и допустимую структуру OVERLAPPED , приложение может запретить уведомление о порте завершения. Для этого необходимо указать допустимый дескриптор события для элемента hEvent структуры OVERLAPPED и задать его бит нижнего порядка. Допустимый дескриптор события, для которого задан бит низкого порядка, предотвращает завершение перекрывающегося ввода-вывода от постановки пакета завершения в порт завершения.

[in] dwMilliseconds

Количество миллисекундах, в течение которых вызывающий объект готов ждать, пока пакет завершения появится в порту завершения. Если пакет завершения не отображается в течение указанного времени, время ожидания функции истекает, возвращает значение FALSE и устанавливает для параметра *lpOverlappedзначение NULL.

Если параметр dwMilliseconds имеет значение INFINITE, время ожидания функции никогда не будет истекает. Если значение dwMilliseconds равно нулю и операция ввода-вывода для вывода из очереди отсутствует, функция немедленно истекает.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 и Windows Server 2008 R2: Значение dwMilliseconds включает время, затраченное в состояниях с низким энергопотреблением. Например, время ожидания продолжает отсчитывать, пока компьютер находится в спялом режиме.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 и Windows Server 2016. Значение dwMilliseconds не включает время, затраченное на малое энергопотребление Государств. Например, время ожидания не продолжает отсчитывать, пока компьютер находится в спятом режиме.

Возвращаемое значение

Возвращает ненулевое значение (TRUE) в случае успешного выполнения или ноль (FALSE) в противном случае.

Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Дополнительные сведения см. в разделе «Примечания».

Комментарии

Эта функция связывает поток с указанным портом завершения. Поток может быть связан с не более чем одним портом завершения.

Если вызов GetQueuedCompletionStatus завершается сбоем, так как связанный с ним дескриптор порта завершения закрыт, а вызов не выполняется, функция возвращает значение FALSE, *lpOverlapped будет иметь значение NULL, а GetLastError возвращает ERROR_ABANDONED_WAIT_0.

Windows Server 2003 и Windows XP: Закрытие дескриптора порта завершения во время невыполненных вызовов не приведет к ранее указанному поведению. Функция будет продолжать ждать, пока запись не будет удалена из порта, или до истечения времени ожидания, если она указана как значение, отличное от INFINITE.

Если функция GetQueuedCompletionStatus завершается успешно, она выводит пакет завершения для успешной операции ввода-вывода из порта завершения и хранит сведения в переменных, на которые указывают следующие параметры: lpNumberOfBytes, lpCompletionKey и lpOverlapped. При сбое (возвращаемое значение FALSE) эти же параметры могут содержать определенные сочетания значений следующим образом:

  • Если *lpOverlapped имеет значение NULL, функция не вывела пакет завершения из порта завершения. В этом случае функция не сохраняет информацию в переменных, на которые указывают параметры lpNumberOfBytes и lpCompletionKey , и их значения являются неопределенными.
  • Если *lpOverlapped не равно NULL и функция выводит пакет завершения для неудачной операции ввода-вывода из порта завершения, функция сохраняет сведения о неудачной операции в переменных, на которые указывают lpNumberOfBytes, lpCompletionKey и lpOverlapped. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Дополнительные сведения о теории портов завершения ввода-вывода, использовании и связанных функциях см. в разделе Порты завершения ввода-вывода.

В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.

Технология Поддерживается
Протокол SMB 3.0 Да
SMB 3.0 Transparent Failover (TFO) Да
SMB 3.0 с масштабируемыми общими папками (SO) Да
Файловая система общего тома кластера (CSVFS) Да
Восстанавливаемая файловая система (ReFS) Да

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header ioapiset.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

Функции управления файлами

Функции

GetQueuedCompletionStatusEx

Порты завершения ввода-вывода

LockFileEx

Обзорные разделы

PostQueuedCompletionStatus

ReadFile

TransactNamedPipe

Использование заголовков Windows

WaitCommEvent

WriteFile