Compartir a través de


Función GetQueuedCompletionStatusEx (ioapiset.h)

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 una en una, use la función GetQueuedCompletionStatus.

Sintaxis

BOOL GetQueuedCompletionStatusEx(
  [in]  HANDLE             CompletionPort,
  [out] LPOVERLAPPED_ENTRY lpCompletionPortEntries,
  [in]  ULONG              ulCount,
  [out] PULONG             ulNumEntriesRemoved,
  [in]  DWORD              dwMilliseconds,
  [in]  BOOL               fAlertable
);

Parámetros

[in] CompletionPort

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

[out] lpCompletionPortEntries

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 de lpCompletionPortEntries.

[in] ulCount

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

[out] ulNumEntriesRemoved

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

[in] dwMilliseconds

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 desqueue, 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 dwMilliseconds valor incluye el tiempo invertido en estados de baja potencia. Por ejemplo, el tiempo de espera continúa contando mientras el equipo está dormido.

Windows 8 y versiones más recientes, Windows Server 2012 y versiones posteriores: El dwMilliseconds valor no incluye el tiempo invertido en estados de baja potencia. Por ejemplo, el tiempo de espera no continúa contando mientras el equipo está dormido.

[in] fAlertable

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 en el 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. Se pone en cola un APC cuando se llama a QueueUserAPC.

Valor devuelto

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

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

Observaciones

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 es necesario que el usuario de esta función compruebe 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 controlador de 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 se cierra el identificador asociado a él, 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.

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

Requisitos

Requisito Valor
cliente mínimo admitido Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2008 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de ioapiset.h (incluya Windows.h)
biblioteca de Kernel32.lib
DLL de Kernel32.dll

Consulte también

ConnectNamedPipe

CreateIoCompletionPort

DeviceIoControl

funciones de administración de archivos

funciones de

GetQueuedCompletionStatusEx

de puertos de finalización de E/S de

LockFileEx de

Temas de información general de

PostQueuedCompletionStatus

ReadFile

TransactNamedPipe

usar los encabezados de Windows

WaitCommEvent

WriteFile