Funzione GetQueuedCompletionStatusEx

Recupera più voci di porta di completamento contemporaneamente. Attende il completamento delle operazioni di I/O in sospeso associate alla porta di completamento specificata.

Per dequeue i pacchetti di completamento di I/O una alla volta, usare la funzione GetQueuedCompletionStatus .

Sintassi

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

Parametri

CompletamentoPort [in]

Handle alla porta di completamento. Per creare una porta di completamento, usare la funzione CreateIoCompletionPort .

lpCompletionPortEntries [out]

In input, punta a una matrice pre-allocata di strutture OVERLAPPED_ENTRY .

Nell'output viene ricevuta una matrice di strutture OVERLAPPED_ENTRY che contengono le voci. Il numero di elementi di matrice viene fornito da ulNumEntriesRemoved.

Il numero di byte trasferiti durante ogni I/O, la chiave di completamento che indica il file in cui si è verificato ogni I/O e l'indirizzo della struttura sovrapposta usato in ogni I/O originale vengono restituiti tutti nella matrice lpCompletionPortEntries .

ulCount [in]

Numero massimo di voci da rimuovere.

ulNumEntriesRemoved [out]

Puntatore a una variabile che riceve il numero di voci effettivamente rimosse.

dwMilliseconds [in]

Numero di millisecondi che il chiamante è disposto ad attendere la visualizzazione di un pacchetto di completamento nella porta di completamento. Se un pacchetto di completamento non viene visualizzato entro l'ora specificata, la funzione viene disattivata e restituisce FALSE.

Se dwMilliseconds è INFINITE (0xFFFFFFFF), la funzione non verrà mai timeout. Se dwMilliseconds è zero e non esiste alcuna operazione di I/O da dequeue, la funzione timeout immediatamente.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 e Windows Server 2008 R2: Il valore dwMilliseconds include tempo trascorso in stati di bassa potenza. Ad esempio, il timeout mantiene il conteggio mentre il computer è inattivo.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 e Windows Server 2016: il valore dwMilliseconds non include tempo trascorso in bassa potenza Stati. Ad esempio, il timeout non mantiene il conteggio mentre il computer è inattivo.

fAlertable [in]

Se questo parametro è FALSE, la funzione non restituisce finché il periodo di timeout è trascorso o viene recuperata una voce.

Se il parametro è TRUE e non sono disponibili voci, la funzione esegue un'attesa avvisabile. Il thread restituisce quando il sistema accoda una routine di completamento di I/O o al thread e il thread esegue la funzione.

Una routine di completamento viene accodata quando la funzione ReadFileEx o WriteFileEx in cui è stata specificata è stata completata e il thread chiamante è il thread che ha avviato l'operazione. Un APC viene accodato quando si chiama QueueUserAPC.

Valore restituito

Restituisce non zero (TRUE) se ha esito positivo o zero (FALSE) in caso contrario.

Per informazioni dettagliate sull'errore, chiamare GetLastError.

Osservazioni

Questa funzione associa un thread alla porta di completamento specificata. Un thread può essere associato alla maggior parte di una porta di completamento.

Questa funzione restituisce TRUE quando almeno un I/O in sospeso viene completato, ma è possibile che una o più operazioni di I/O non siano riuscite. Si noti che è l'utente di questa funzione per controllare l'elenco delle voci restituite nel parametro lpCompletionPortEntries per determinare quale delle operazioni di I/O possibili non riuscite esaminando lo stato contenuto nel membro lpOverlapped in ogni OVERLAPPED_ENTRY.

Questa funzione restituisce FALSE quando non è stata eseguita alcuna operazione di I/O. Questo significa in genere che si è verificato un errore durante l'elaborazione dei parametri a questa chiamata o che l'handle CompletionPort è stato chiuso o non è altrimenti valido. La funzione GetLastError fornisce informazioni di errore estese.

Se una chiamata a GetQueuedCompletionStatusEx ha esito negativo perché l'handle associato a esso è chiuso, la funzione restituisce FALSE e GetLastError restituirà ERROR_ABANDONED_WAIT_0.

Le applicazioni server possono avere diversi thread che chiamano la funzione GetQueuedCompletionStatusEx per la stessa porta di completamento. Al termine delle operazioni di I/O, vengono accodati a questa porta nell'ordine first-in-first-out. Se un thread è attivamente in attesa di questa chiamata, una o più richieste in coda completano la chiamata solo per tale thread.

Per altre informazioni sulla teoria della porta di completamento di I/O, sull'utilizzo e sulle funzioni associate, vedere Porte di completamento I/O.

In Windows 8 e Windows Server 2012 questa funzione è supportata dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0

Failover trasparente SMB 3.0 (TFO)

SMB 3.0 con condivisioni file con scalabilità orizzontale (SO)

File system del volume condiviso del cluster (CsvFS)

File system resiliente (ReFS)

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista [app desktop | App UWP]
Server minimo supportato
Windows Server 2008 [app desktop | App UWP]
Intestazione
IoAPI.h (includono Windows.h);
WinBase.h in Windows Server 2008 R2, Windows 7, Windows Server 2008 e Windows Vista (includono Windows.h)
Libreria
Kernel32.lib
DLL
Kernel32.dll

Vedere anche

Argomenti di panoramica

Funzioni di gestione file

Porte di completamento di I/O

Uso delle intestazioni di Windows

Funzioni

ConnectNamedPipe

CreateIoCompletionPort

Deviceiocontrol

GetQueuedCompletionStatusEx

LockFileEx

ReadFile

PostQueuedCompletionStatus

TransactNamedPipe

WaitCommEvent

WriteFile