Platform SDK: TAPI |
Telephony operations complete either synchronously or asynchronously. These two models differ as follows. Synchronous functions execute the entire request before the caller's thread is allowed to return from the function call. Asynchronous functions return from the function call before the request has executed in its entirety. When the asynchronous request later completes, the service provider reports the completion by calling a callback procedure that TAPI originally supplied to it early in the initialization sequence.
It is interesting to consider the timing of a "completion" callback relative to when the original request returns. A typical asynchronous request would be implemented by the service provider as in the following pseudocode:
Some_request(Request_ID, ...) { check parameters for validity check device state for validity store Request_ID for Completion Interrupt Handler's use manipulate device registers to start physical operation return Request_ID // to indicate asynch operation } Operation Completion Interrupt Handler: { if operation was successful then call "completion" callback passing Request_ID and "success" else call "completion" callback passing Request_ID and "error num" endif }
If the operation completes very rapidly (or the original request returns very slowly), it is possible that the interrupt handler that runs when a physical operation completes may be triggered before the original request returns to the application or even to TAPI. This behavior is allowed. TAPI guarantees that the eventual completion notification to the application is delivered after the original request returns.