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 |
|
Biblioteca |
|
DLL |
|