Compartir a través de


Funciones asincrónicas

Una operación que se completa de forma asincrónica realiza parte de su procesamiento en la llamada de función realizada por la aplicación y el resto de él en un subproceso de ejecución independiente después de que TAPI 2.x haya devuelto desde la llamada de función. Para garantizar la finalización del procesamiento de la llamada, el proveedor de servicios vectoriza la solicitud a otra entidad activa en el sistema( por ejemplo, un servidor LAN, hardware de complemento, un conmutador o una red) y, a continuación, vuelve a la aplicación. En este momento, se devuelve un resultado de error negativo o un identificador de solicitud positivo a la aplicación.

En el momento de la finalización asincrónica (el proveedor de servicios ha recibido una interrupción del hardware, lo que significa que se debe entregar un mensaje), el proveedor de servicios llama a TAPISRV e informa de que "Event X ha tenido lugar. Entrega un mensaje adecuado a todas las aplicaciones interesadas". Cuando TAPISRV recibe este mensaje, reenvía el mensaje a la biblioteca de vínculos dinámicos TAPI, en el proceso de la aplicación, que a su vez publica un mensaje de ventana, señala un controlador de eventos o envía a un puerto de finalización de E/S, según el esquema de notificación de mensaje seleccionado por la aplicación en lineInitializeEx o phoneInitializeEx.

Cuando se completa la parte asincrónica de la operación, se envía un mensaje de LINE_REPLY (o PHONE_REPLY) a la aplicación. Este mensaje contiene, como uno de sus parámetros, el identificador de solicitud devuelto por la llamada de función. Este identificador de solicitud permite a la aplicación determinar qué solicitud original se ha completado. (Las aplicaciones deben recordar los identificadores de solicitud de todas sus solicitudes en curso para que los mensajes de respuesta se puedan controlar correctamente). Un segundo parámetro para el mensaje LINE_REPLY (o PHONE_REPLY) es el valor devuelto asincrónico. Se trata de un valor negativo (para un error) o cero si la operación se completó correctamente. En el caso de las operaciones asincrónicas, cualquiera de los valores devueltos se puede devolver como parte de la función return o como el parámetro dwParam2 en el mensaje LINE_REPLY o PHONE_REPLY. El valor 0, que indica que se ha realizado correctamente, solo se devolverá en el mensaje LINE_REPLY y nunca como valor devuelto de la función.

Las funciones initialize ( lineInitializeEx y phoneInitializeEx) indican a TAPI cómo enviar estos mensajes a la aplicación.

Nota

En algunos casos, si una aplicación multiproceso llama a una función asincrónica desde un subproceso distinto del subproceso desde el que la aplicación inicializó la línea o el dispositivo telefónico, la aplicación puede recibir el LINE_REPLY o PHONE_REPLY mensaje antes de que se haya devuelto la función asincrónica. En tales casos, la aplicación debe guardar los parámetros del mensaje y esperar hasta que se devuelva la función asincrónica y se conozca el identificador de solicitud antes de procesar el mensaje.