Fonction GetQueuedCompletionStatusEx
Récupère simultanément plusieurs entrées de port d’achèvement. Il attend que les opérations d’E/S en attente associées au port d’achèvement spécifié se terminent.
Pour mettre en file d’attente les paquets d’achèvement d’E/S un par un, utilisez la fonction GetQueuedCompletionStatus .
Syntaxe
BOOL WINAPI GetQueuedCompletionStatusEx(
_In_ HANDLE CompletionPort,
_Out_ LPOVERLAPPED_ENTRY lpCompletionPortEntries,
_In_ ULONG ulCount,
_Out_ PULONG ulNumEntriesRemoved,
_In_ DWORD dwMilliseconds,
_In_ BOOL fAlertable
);
Paramètres
-
CompletionPort [in]
-
Handle du port d’achèvement. Pour créer un port d’achèvement, utilisez la fonction CreateIoCompletionPort .
-
lpCompletionPortEntries [out]
-
En entrée, pointe vers un tableau pré-alloué de structures OVERLAPPED_ENTRY .
Lors de la sortie, reçoit un tableau de structures OVERLAPPED_ENTRY qui contiennent les entrées. Le nombre d’éléments de tableau est fourni par ulNumEntriesRemoved.
Le nombre d’octets transférés au cours de chaque E/S, la clé d’achèvement qui indique sur quel fichier chaque E/S s’est produite et l’adresse de structure qui se chevauche utilisée dans chaque E/S d’origine sont tous retournés dans le tableau lpCompletionPortEntries .
-
ulCount [in]
-
Nombre maximal d’entrées à supprimer.
-
ulNumEntriesRemoved [out]
-
Pointeur vers une variable qui reçoit le nombre d’entrées réellement supprimées.
-
dwMilliseconds [in]
-
Nombre de millisecondes pendant lesquelles l’appelant est prêt à attendre qu’un paquet d’achèvement apparaisse au port d’achèvement. Si un paquet d’achèvement n’apparaît pas dans le délai spécifié, la fonction expire et retourne FALSE.
Si dwMillisecondes est INFINITE (0xFFFFFFFF), la fonction n’expirera jamais. Si dwMillisecondes est égal à zéro et qu’aucune opération d’E/S n’est à mettre en file d’attente, la fonction expire immédiatement.
Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 et Windows Server 2008 R2 : La valeur dwMilliseconds inclut le temps passé dans des états de faible puissance. Par exemple, le délai d’attente continue de compter pendant que l’ordinateur est en veille.
Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 et Windows Server 2016 : la valeur dwMilliseconds n’inclut pas le temps passé en basse puissance États. Par exemple, le délai d’attente ne continue pas à compter pendant que l’ordinateur est en veille.
-
fAlertable [in]
-
Si ce paramètre a la valeur FALSE, la fonction ne retourne pas tant que le délai d’expiration n’est pas écoulé ou qu’une entrée n’est pas récupérée.
Si le paramètre a la valeur TRUE et qu’aucune entrée n’est disponible, la fonction effectue une attente pouvant être alertable. Le thread retourne lorsque le système met en file d’attente une routine d’achèvement d’E/S ou APC vers le thread et que le thread exécute la fonction.
Une routine d’achèvement est mise en file d’attente lorsque la fonction ReadFileEx ou WriteFileEx dans laquelle elle a été spécifiée est terminée, et que le thread appelant est le thread qui a lancé l’opération. Un APC est mis en file d’attente lorsque vous appelez QueueUserAPC.
Valeur retournée
Retourne une valeur différente de zéro (TRUE) en cas de réussite ou de zéro (FALSE) dans le cas contraire.
Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Cette fonction associe un thread au port d’achèvement spécifié. Un thread peut être associé à au plus un port d’achèvement.
Cette fonction retourne TRUE quand au moins une E/S en attente est terminée, mais il est possible qu’une ou plusieurs opérations d’E/S échouent. Notez qu’il appartient à l’utilisateur de cette fonction de case activée la liste des entrées retournées dans le paramètre lpCompletionPortEntries pour déterminer lesquelles d’entre elles correspondent à d’éventuelles opérations d’E/S ayant échoué en examinant les status contenues dans le membre lpOverlapped dans chaque OVERLAPPED_ENTRY.
Cette fonction retourne FALSE lorsqu’aucune opération d’E/S n’a été mise en file d’attente. Cela signifie généralement qu’une erreur s’est produite lors du traitement des paramètres de cet appel, ou que le handle CompletionPort a été fermé ou n’est pas valide. La fonction GetLastError fournit des informations d’erreur étendues.
Si un appel à GetQueuedCompletionStatusEx échoue parce que le handle qui lui est associé est fermé, la fonction retourne FALSE et GetLastError retourne ERROR_ABANDONED_WAIT_0.
Les applications serveur peuvent avoir plusieurs threads appelant la fonction GetQueuedCompletionStatusEx pour le même port d’achèvement. Une fois les opérations d’E/S terminées, elles sont mises en file d’attente vers ce port dans l’ordre du premier entrant. Si un thread attend activement cet appel, une ou plusieurs demandes en file d’attente terminent l’appel pour ce thread uniquement.
Pour plus d’informations sur la théorie des ports d’achèvement d’E/S, l’utilisation et les fonctions associées, consultez Ports d’achèvement d’E/S.
Dans Windows 8 et Windows Server 2012, cette fonction est prise en charge par les technologies suivantes.
Technology | Prise en charge |
---|---|
Protocole SMB (Server Message Block) 3.0 |
Oui |
Basculement transparent (TFO) SMB 3.0 |
Oui |
SMB 3.0 avec partages de fichiers avec montée en puissance sortante (SO) |
Oui |
Cluster Shared Volume File System (CsvFS) |
Oui |
Système de fichiers résilient (ReFS) |
Oui |
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows Vista [applications de bureau | Applications UWP] |
Serveur minimal pris en charge |
Windows Server 2008 [applications de bureau | Applications UWP] |
En-tête |
|
Bibliothèque |
|
DLL |
|
Voir aussi
-
Rubriques de vue d’ensemble
-
Fonctions