Partilhar via


Função GetQueuedCompletionStatusEx

Recupera várias entradas de porta de conclusão simultaneamente. Ele aguarda a conclusão das operações de E/S pendentes associadas à porta de conclusão especificada.

Para retirar pacotes de conclusão de E/S da fila um de cada vez, use a função GetQueuedCompletionStatus .

Sintaxe

BOOL WINAPI GetQueuedCompletionStatusEx(
  _In_  HANDLE             CompletionPort,
  _Out_ LPOVERLAPPED_ENTRY lpCompletionPortEntries,
  _In_  ULONG              ulCount,
  _Out_ PULONG             ulNumEntriesRemoved,
  _In_  DWORD              dwMilliseconds,
  _In_  BOOL               fAlertable
);

Parâmetros

ConclusãoPorto[in]

Um identificador para a porta de conclusão. Para criar uma porta de conclusão, use a função CreateIoCompletionPort .

lpCompletionPortEntries[out]

Na entrada, aponta para uma matriz pré-alocada de estruturas OVERLAPPED_ENTRY .

Na saída, recebe uma matriz de OVERLAPPED_ENTRY estruturas que contêm as entradas. O número de elementos de matriz é fornecido por ulNumEntriesRemoved.

O número de bytes transferidos durante cada E/S, a chave de conclusão que indica em qual arquivo cada E/S ocorreu e o endereço de estrutura sobreposta usado em cada E/S original são retornados na matriz lpCompletionPortEntrys .

ulContagem[in]

O número máximo de entradas a remover.

ulNumEntriesRemovido[out]

Um ponteiro para uma variável que recebe o número de entradas realmente removidas.

dwMilissegundos[in]

O número de milissegundos que o chamador está disposto a aguardar que um pacote de conclusão apareça na porta de conclusão. Se um pacote de conclusão não aparecer dentro do tempo especificado, a função expira e retorna FALSE.

Se dwMilliseconds for INFINITE (0xFFFFFFFF), a função nunca expirará. Se dwMilliseconds for zero e não houver nenhuma operação de E/S para remover a fila, a função expirará imediatamente.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 e Windows Server 2008 R2: O valor dwMilliseconds inclui o tempo gasto em estados de baixa energia. Por exemplo, o tempo limite mantém a contagem regressiva enquanto o computador está em suspensão.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 e Windows Server 2016: O valor dwMilliseconds não inclui o tempo gasto em estados de baixa energia. Por exemplo, o tempo limite não mantém a contagem regressiva enquanto o computador está em suspensão.

fAlertável[in]

Se este parâmetro for FALSE, a função não retornará até que o período de tempo limite tenha decorrido ou uma entrada seja recuperada.

Se o parâmetro for TRUE e não houver entradas disponíveis, a função executará uma espera alertável. O thread retorna quando o sistema enfileira uma rotina de conclusão de E/S ou APC para o thread e o thread executa a função.

Uma rotina de conclusão é enfileirada quando a função ReadFileEx ou WriteFileEx na qual foi especificada foi concluída e o thread de chamada é o thread que iniciou a operação. Um APC é enfileirado quando você chama QueueUserAPC.

Valor de retorno

Retorna diferente de zero TRUE se for bem-sucedido ou zero FALSE caso contrário.

Para obter informações de erro estendidas, ligue GetLastError.

Observações

Esta função associa um thread à porta de conclusão especificada. Um thread pode ser associado a, no máximo, uma porta de conclusão.

Essa função retorna TRUE quando pelo menos uma E/S pendente é concluída, mas é possível que uma ou mais operações de E/S tenham falhado. Observe que cabe ao usuário desta função verificar a lista de entradas retornadas no parâmetro lpCompletionPortEntries para determinar quais delas correspondem a possíveis operações de E/S com falha, observando o status contido no membro lpOverlapped em cada OVERLAPPED_ENTRY.

Essa função retorna FALSE quando nenhuma operação de E/S foi retirada da fila. Isso normalmente significa que ocorreu um erro durante o processamento dos parâmetros para essa chamada ou que o identificador CompletionPort foi fechado ou é inválido. A função GetLastError fornece informações de erro estendidas.

Se uma chamada para GetQueuedCompletionStatusEx falhar porque o identificador associado a ela está fechado, a função retornará FALSE e GetLastError retornará ERROR_ABANDONED_WAIT_0.

Os aplicativos de servidor podem ter vários threads chamando a função GetQueuedCompletionStatusEx para a mesma porta de conclusão. À medida que as operações de E/S são concluídas, elas são enfileiradas para essa porta na ordem de primeiro a entrar, primeiro a sair. Se um thread estiver aguardando ativamente nessa chamada, uma ou mais solicitações enfileiradas concluem a chamada somente para esse thread.

Para obter mais informações sobre teoria de porta de conclusão de E/S, uso e funções associadas, consulte Portas de conclusão de E/S.

No Windows 8 e no Windows Server 2012, esta função é suportada pelas seguintes tecnologias.

Tecnologia Suportado
Protocolo SMB (Server Message Block) 3.0 Sim
Failover transparente (TFO) SMB 3.0 Sim
SMB 3.0 com compartilhamentos de arquivos (SO) de expansão Sim
Sistema de Arquivos de Volume Compartilhado de Cluster (CsvFS) Sim
Sistema de arquivos resiliente (ReFS) Sim

Requerimentos

Requisito Valor
Cliente mínimo suportado Windows Vista [aplicações de ambiente de trabalho | Aplicativos UWP]
Servidor mínimo suportado Windows Server 2008 [aplicações de ambiente de trabalho | Aplicativos UWP]
Cabeçalho IoAPI.h (incluir Windows.h)
WinBase.h no Windows Server 2008 R2, Windows 7, Windows Server 2008 e Windows Vista (incluir Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Ver também

Tópicos de visão geral

Funções de gerenciamento de arquivos

Portas de conclusão de E/S

Usando os cabeçalhos do Windows

Funções

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

LockFileEx

ReadFile

PostQueuedCompletionStatus

TransactNamedPipe

WaitCommEvent

WriteFile