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 remover pacotes de conclusão de E/S 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

CompletionPort [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 de OVERLAPPED_ENTRY .

Na saída, recebe uma matriz de estruturas de OVERLAPPED_ENTRY que mantê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 sobreposto usado em cada E/S original são todos retornados na matriz lpCompletionPortEntries .

ulCount [in]

O número máximo de entradas a serem removidas.

ulNumEntriesRemoved [out]

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

dwMilliseconds [in]

O número de milissegundos que o chamador está disposto a aguardar para 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 atingirá o tempo limite e retornará FALSE.

Se dwMilliseconds for INFINITE (0xFFFFFFFF), a função nunca atingirá o tempo limite. Se dwMilliseconds for zero e não houver nenhuma operação de E/S para desembolsar, a função atingirá o tempo limite 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 potência. Por exemplo, o tempo limite continua em contagem regressiva enquanto o computador está dormindo.

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 baixa potência Estados. Por exemplo, o tempo limite não mantém a contagem regressiva enquanto o computador está dormindo.

fAlertable [in]

Se esse 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 retornado

Retornará diferente de zero (TRUE) se tiver êxito ou zero (FALSE) caso contrário.

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

Comentários

Essa 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 falharam. Observe que cabe ao usuário dessa função marcar a lista de entradas retornadas no parâmetro lpCompletionPortEntries para determinar qual delas corresponde a quaisquer possíveis operações de E/S com falha examinando o status contido no membro lpOverlapped em cada OVERLAPPED_ENTRY.

Essa função retorna FALSE quando nenhuma operação de E/S foi desativada. Isso normalmente significa que ocorreu um erro ao processar os 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 ele 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 nessa porta na ordem de primeiro a sair. Se um thread estiver aguardando ativamente essa chamada, uma ou mais solicitações enfileiradas concluirão a chamada somente para esse thread.

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

Em Windows 8 e Windows Server 2012, essa função é compatível com as tecnologias a seguir.

Tecnologia Com suporte
Protocolo SMB (Bloco de Mensagens do Servidor) 3.0
Sim
TFO (Failover Transparente) do SMB 3.0
Sim
SMB 3.0 com compartilhamentos de arquivos de expansão (SO)
Sim
Sistema de arquivos de volume compartilhado de cluster (CsvFS)
Sim
ReFS (Sistema de Arquivos Resiliente)
Sim

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte
Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Cabeçalho
IoAPI.h (inclua Windows.h);
WinBase.h no Windows Server 2008 R2, Windows 7, Windows Server 2008 e Windows Vista (inclua Windows.h)
Biblioteca
Kernel32.lib
DLL
Kernel32.dll

Confira 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

GetQueuedCompletionStatusEx

LockFileEx

ReadFile

PostQueuedCompletionStatus

TransactNamedPipe

Waitcommevent

WriteFile