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 | Sí |
Conmutación por error transparente (TFO) de SMB 3.0 | Sí |
SMB 3.0 con recursos compartidos de archivos de escalabilidad horizontal (SO) | Sí |
Sistema de archivos de volumen compartido de clúster (CsvFS) | Sí |
Sistema de archivos resistente (ReFS) | Sí |
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
funciones de administración de archivos
funciones de
de puertos de finalización de E/S de
LockFileEx de
Temas de información general de