Funkcje asynchroniczne

Operacja wykonywana asynchronicznie wykonuje część przetwarzania w wywołaniu funkcji wykonanym przez aplikację i pozostałą jego część w niezależnym wątku wykonywania po powrocie interfejsu TAPI 2.x z wywołania funkcji. Aby zapewnić ukończenie przetwarzania wywołania, dostawca usług wektoruje żądanie do innej aktywnej jednostki w systemie — na przykład serwera LAN, sprzętu dodatku, przełącznika lub sieci — a następnie wraca do aplikacji. W tej chwili do aplikacji jest zwracany negatywny wynik błędu lub dodatni identyfikator żądania.

W momencie ukończenia asynchronicznego (dostawca usług otrzymał przerwanie od sprzętu, co oznacza, że komunikat musi zostać dostarczony), dostawca usług wywołuje tapISRV i zgłasza, że właśnie miało miejsce zdarzenie X. Dostarczanie odpowiedniego komunikatu do wszystkich zainteresowanych aplikacji". Gdy funkcja TAPISRV odbiera ten komunikat, przekazuje komunikat do biblioteki dynamicznego linku TAPI w procesie aplikacji, który z kolei publikuje komunikat okna, sygnalizuje dojście zdarzeń lub publikuje na porcie uzupełniania we/wy zgodnie z schematem powiadomień komunikatów wybranym przez aplikację w lineInitializeEx lub phoneInitializeEx.

Po zakończeniu asynchronicznej części operacji do aplikacji jest wysyłany komunikat LINE_REPLY (lub PHONE_REPLY). Ten komunikat zawiera, jako jeden z jego parametrów, identyfikator żądania zwrócony przez wywołanie funkcji. Ten identyfikator żądania umożliwia aplikacji określenie, które oryginalne żądanie zostało ukończone. (Aplikacje powinny pamiętać identyfikatory żądań wszystkich swoich żądań w toku, aby komunikaty odpowiedzi mogły być prawidłowo obsługiwane). Drugi parametr komunikatu LINE_REPLY (lub PHONE_REPLY) jest asynchroniczną wartością zwracaną. Jest to wartość ujemna (dla błędu) lub zero, jeśli operacja została ukończona pomyślnie. W przypadku operacji asynchronicznych każdy z zwracanych wartości może zostać zwrócony w ramach zwracanej funkcji lub jako parametr dwParam2 w komunikacie LINE_REPLY lub PHONE_REPLY. Wartość 0, która wskazuje powodzenie, zostanie zwrócona tylko w komunikacie LINE_REPLY i nigdy nie jest zwracana jako wartość zwracana przez funkcję.

Inicjowanie funkcji (lineInitializeEx i phoneInitializeEx) informuje interfejs TAPI, jak wysłać te komunikaty do aplikacji.

Nuta

W niektórych przypadkach, jeśli aplikacja wielowątkowa wywołuje funkcję asynchroniczną z wątku innego niż wątek, z którego aplikacja zainicjowała linię lub urządzenie telefoniczne, aplikacja może otrzymać komunikat LINE_REPLY lub PHONE_REPLY przed zwróceniem funkcji asynchronicznej. W takich przypadkach aplikacja powinna zapisać parametry komunikatu i poczekać na zwrócenie funkcji asynchronicznej, a identyfikator żądania jest znany przed przetworzeniem komunikatu.