Partager via


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
IoAPI.h (inclure Windows.h) ;
WinBase.h sur Windows Server 2008 R2, Windows 7, Windows Server 2008 et Windows Vista (y compris Windows.h)
Bibliothèque
Kernel32.lib
DLL
Kernel32.dll

Voir aussi

Rubriques de vue d’ensemble

Fonctions de gestion de fichiers

Ports de saisie semi-automatique d’E/S

Utilisation des en-têtes Windows

Fonctions

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

GetQueuedCompletionStatusEx

LockFileEx

ReadFile

PostQueuedCompletionStatus

TransactNamedPipe

WaitCommEvent

WriteFile