Compartilhar via


Função GetQueuedCompletionStatusEx (ioapiset.h)

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

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

Sintaxe

BOOL GetQueuedCompletionStatusEx(
  [in]  HANDLE             CompletionPort,
  [out] LPOVERLAPPED_ENTRY lpCompletionPortEntries,
  [in]  ULONG              ulCount,
  [out] PULONG             ulNumEntriesRemoved,
  [in]  DWORD              dwMilliseconds,
  [in]  BOOL               fAlertable
);

Parâmetros

[in] CompletionPort

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

[out] lpCompletionPortEntries

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 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 sobreposto usado em cada E/S original são todos retornados na matriz lpCompletionPortEntries.

[in] ulCount

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

[out] ulNumEntriesRemoved

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

[in] dwMilliseconds

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 atingirá o tempo limite e retornará false.

Se dwMilliseconds for INFINITE (0xFFFFFFFF), a função nunca terá tempo limite. Se dwMilliseconds for zero e não houver nenhuma operação de E/S para desembolsar, a função acabará 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 e mais recente, Windows Server 2012 e mais recente: o valor dwMilliseconds não inclui o tempo gasto em estados de baixa potência. Por exemplo, o tempo limite não continua a contagem regressiva enquanto o computador está dormindo.

[in] fAlertable

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 VERDADEIRO 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 ela 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 nonzero (TRUE) se bem-sucedido ou zero (FALSE) caso contrário.

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

Observações

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 VERDADEIRO 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 verificar a lista de entradas retornadas no parâmetro lpCompletionPortEntries para determinar quais delas correspondem 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 em ordem inicial. 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.

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

Tecnologia Suportado
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
de cliente com suporte mínimo Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho ioapiset.h (inclua Windows.h)
biblioteca Kernel32.lib
de DLL Kernel32.dll

Consulte também

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

Funções de gerenciamento de arquivos

Funções

GetQueuedCompletionStatusEx

portas de conclusão de E/S

LockFileEx

Tópicos de visão geral

PostQueuedCompletionStatus

ReadFile

TransactNamedPipe

usando os cabeçalhos do Windows

WaitCommEvent

writefile