WinAsyncAPPCIOCP
La función WinAsyncAPPCIOCP proporciona un punto de entrada asincrónico para todos los verbos APPC. Use esta función en lugar de las versiones de bloqueo de los verbos para permitir que varias sesiones se controlen en el mismo subproceso mediante puertos de finalización de E/S. Este verbo solo se admite en Microsoft Windows y usa puertos de finalización de E/S de Win32.
Sintaxis
HANDLE WINAPI WinAsyncAPPCIOCP(
APPC_IOCP_INFO *iocp_handle,
longlpVcb);
Parámetros
iocp_handle
Puntero a una estructura de APPC_IOCP_INFO utilizada para pasar información del puerto de finalización de E/S.
lpVcb
Puntero al bloque de control de verbos
La estructura APPC_IOCP_INFO tiene el siguiente prototipo:
APPC_CompletionPort;APPC_NumberOfBytesTransferred;
APPC_CompletionKey;
APPC_pOverlapped;
APPC_CompletionPort
Este parámetro proporcionado es el IDENTIFICADOR devuelto por la llamada a la función CreateIoCompletionPort cuando se crea el puerto de finalización de E/S. El puerto de finalización de E/S debe crearse antes de llamar a la función WinAsyncAPPCIOCP . Cuando se completa el verbo, la biblioteca APPC llama a la función PostQueuedCompletionStatus con los campos restantes de la estructura como entradas, y estos campos simplemente se pasan a la función GetQueuedCompletionStatus emitida por la aplicación.
APPC_NumberOfBytesTransferred
Este parámetro proporcionado se omite. Cuando se completa el verbo APPC, la biblioteca appc llama a la función PostQueuedCompletionStatus con este campo como entrada y el valor devuelto para dwNumberOfBytesTransferred simplemente se pasa a través de la función GetQueuedCompletionStatus emitida por la aplicación.
APPC_CompletionKey
Este parámetro proporcionado se omite. Cuando se completa el verbo APPC, la biblioteca APPC llama a la función PostQueuedCompletionStatus con este campo como entrada y el valor devuelto para dwCompletionKey simplemente se pasa a la función GetQueuedCompletionStatus emitida por la aplicación.
APPC_pOverlapped
Este parámetro proporcionado se omite. Cuando se completa el verbo APPC, la biblioteca de APPC llama a la función PostQueuedCompletionStatus con este campo como entrada y el valor devuelto para el lpOverlapped simplemente se pasa a la función GetQueuedCompletionStatus emitida por la aplicación.
Valor devuelto
El valor devuelto especifica si la solicitud de resolución asincrónica se realizó correctamente. Si la función se realizó correctamente, el valor devuelto es un identificador de tarea asincrónico. Si la función no se realizó correctamente, se devuelve un cero.
Cuando esta función vuelve con un valor correcto, esto no indica que la llamada a APPC se devolverá correctamente. Solo indica que era posible que la biblioteca appc intente realizar la llamada de APPC de forma asincrónica mediante un puerto de finalización de E/S para la notificación.
Comentarios
Esta función está pensada para su uso con CreateIoCompletionPort y GetQueuedCompletionStatus en la API de Win32. Estas funciones se describen en la sección "Referencia" de la documentación de Microsoft Platform SDK.
Para obtener un ejemplo de cómo usar este verbo en TP multiproceso, consulte el TP de recepción multiproceso (MRCVIO ubicado en la carpeta SNA\MSENDRCV) mediante puertos de finalización de E/S incluidos en el SDK de Host Integration Server.
Los verbos appC usados en conversaciones básicas que pueden bloquear son los siguientes:
-
Los verbos appC usados en las conversaciones asignadas que pueden bloquear son los siguientes:
-
Cuando se usan las versiones sincrónicas o asincrónicas de un verbo, una aplicación solo puede tener una función pendiente en curso en una conversación a la vez. Un intento de iniciar una segunda función da como resultado el código de error AP_CONV_BUSY.
Las excepciones al párrafo anterior se RECEIVE_AND_POST, MC_RECEIVE_AND_POST, RECEIVE_AND_WAIT y MC_RECEIVE_AND_WAIT.
Para permitir el uso completo de la compatibilidad asincrónica, se han modificado RECEIVE_AND_WAIT y MC_RECEIVE_AND_WAIT verbos emitidos de forma asincrónica para que actúen como los verbos RECEIVE_AND_POST y MC_RECEIVE_AND_POST . En concreto, mientras que una versión asincrónica de uno de estos verbos está pendiente, se pueden emitir los siguientes verbos en la misma conversación:
DEALLOCATE (AP_ABEND_PROG, AP_ABEND_SVC o AP_ABEND_TIMER)
-
Esto permite a una aplicación, en particular, una aplicación de servidor usar un RECEIVE_AND_WAIT asincrónico o MC_RECEIVE_AND_WAIT recibir datos. Aunque el RECEIVE_AND_POST, MC_RECEIVE_AND_POST, RECEIVE_AND_WAIT o MC_RECEIVE_AND_WAIT está pendiente, todavía puede usar SEND_ERROR o MC_SEND_ERROR y REQUEST_TO_SEND o MC_REQUEST_TO_SEND. Se recomienda usar esta característica para obtener compatibilidad asincrónica completa y, en particular, para admitir varias conversaciones en el mismo subproceso.
Una vez completada la operación asincrónica, se notifica a la aplicación a través de la función GetQueuedCompletionStatus . Tras la finalización de E/S, examine el código de retorno principal de APPC y el código de retorno secundario en el bloque de control de verbos para ver las condiciones de error.