Función GetQueuedCompletionStatusEx

Recupera varias entradas de puerto de finalización simultáneamente. Espera a que se completen las operaciones de E/S pendientes asociadas al puerto de finalización especificado.

Para quitar paquetes de finalización de E/S de cola de uno en uno, use la función GetQueuedCompletionStatus .

Sintaxis

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]

Identificador del puerto de finalización. Para crear un puerto de finalización, use la función CreateIoCompletionPort .

lpCompletionPortEntries [out]

En la entrada, apunta a una matriz asignada previamente de estructuras de OVERLAPPED_ENTRY .

En la salida, recibe una matriz de OVERLAPPED_ENTRY estructuras que contienen las entradas. El número de elementos de matriz lo proporciona ulNumEntriesRemoved.

El número de bytes transferidos durante cada E/S, la clave de finalización que indica en qué archivo se produjo cada E/S y la dirección de estructura superpuesta usada en cada E/S original se devuelven en la matriz lpCompletionPortEntries .

ulCount [in]

Número máximo de entradas que se van a quitar.

ulNumEntriesRemoved [out]

Puntero a una variable que recibe el número de entradas que realmente se han quitado.

dwMilliseconds [in]

Número de milisegundos que el autor de la llamada está dispuesto a esperar a que aparezca un paquete de finalización en el puerto de finalización. Si un paquete de finalización no aparece dentro del tiempo especificado, la función agota el tiempo de espera y devuelve FALSE.

Si dwMilliseconds es INFINITE (0xFFFFFFFF), la función nunca agotará el tiempo de espera. Si dwMilliseconds es cero y no hay ninguna operación de E/S para quitar la cola, la función agotará el tiempo de espera inmediatamente.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 y Windows Server 2008 R2: El valor dwMilliseconds incluye el tiempo invertido en estados de baja potencia. Por ejemplo, el tiempo de espera sigue contando mientras el equipo está dormido.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 y Windows Server 2016: el valor dwMilliseconds no incluye el tiempo invertido en baja potencia Estados. Por ejemplo, el tiempo de espera no sigue contando mientras el equipo está dormido.

fAlertable [in]

Si este parámetro es FALSE, la función no devuelve hasta que haya transcurrido el período de tiempo de espera o se recupere una entrada.

Si el parámetro es TRUE y no hay entradas disponibles, la función realiza una espera de alerta. El subproceso devuelve cuando el sistema pone en cola una rutina de finalización de E/S o APC al subproceso y el subproceso ejecuta la función.

Una rutina de finalización se pone en cola cuando se ha completado la función ReadFileEx o WriteFileEx en la que se especificó, y el subproceso que realiza la llamada es el subproceso que inició la operación. Un APC se pone en cola cuando se llama a QueueUserAPC.

Valor devuelto

Devuelve un valor distinto de cero (TRUE) si es correcto o cero (FALSE) en caso contrario.

Para obtener información de error extendida, llame a GetLastError.

Comentarios

Esta función asocia un subproceso al puerto de finalización especificado. Un subproceso se puede asociar como máximo a un puerto de finalización.

Esta función devuelve TRUE cuando se completa al menos una E/S pendiente, pero es posible que se produzca un error en una o varias operaciones de E/S. Tenga en cuenta que el usuario de esta función debe comprobar la lista de entradas devueltas en el parámetro lpCompletionPortEntries para determinar cuál de ellas corresponde a las posibles operaciones de E/S con errores examinando el estado contenido en el miembro lpOverlapped en cada OVERLAPPED_ENTRY.

Esta función devuelve FALSE cuando no se ha quitado ninguna operación de E/S. Normalmente, esto significa que se produjo un error al procesar los parámetros en esta llamada, o que el identificador CompletionPort se cerró o no es válido. La función GetLastError proporciona información de error extendida.

Si se produce un error en una llamada a GetQueuedCompletionStatusEx porque el identificador asociado a él está cerrado, la función devuelve FALSE y GetLastError devolverá ERROR_ABANDONED_WAIT_0.

Las aplicaciones de servidor pueden tener varios subprocesos que llaman a la función GetQueuedCompletionStatusEx para el mismo puerto de finalización. A medida que se completan las operaciones de E/S, se ponen en cola en este puerto en orden primero en salir. Si un subproceso está esperando activamente esta llamada, una o varias solicitudes en cola completan la llamada solo para ese subproceso.

Para obtener más información sobre la teoría del puerto de finalización de E/S, el uso y las funciones asociadas, consulte Puertos de finalización de E /S.

En Windows 8 y Windows Server 2012, esta función es compatible con las siguientes tecnologías.

Technology Compatible
Protocolo bloque de mensajes del servidor (SMB) 3.0
Yes
Conmutación por error transparente (TFO) de SMB 3.0
Yes
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO)
Yes
Sistema de archivos de volumen compartido de clúster (CsvFS)
Yes
Sistema de archivos resistente a errores (ReFS)
Yes

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible
Windows Server 2008 [aplicaciones de escritorio | Aplicaciones para UWP]
Encabezado
IoAPI.h (incluye Windows.h);
WinBase.h en Windows Server 2008 R2, Windows 7, Windows Server 2008 y Windows Vista (incluyen Windows.h)
Biblioteca
Kernel32.lib
Archivo DLL
Kernel32.dll

Vea también

Temas de información general

Funciones de administración de archivos

Puertos de finalización de E/S

Usar los encabezados de Windows

Funciones

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

GetQueuedCompletionStatusEx

LockFileEx

ReadFile

PostQueuedCompletionStatus

TransactNamedPipe

WaitCommEvent

WriteFile