媒体事件计时器
许多应用程序依赖于媒体事件之间的计时关系 (例如,) 接收的 DTMF 数字来确定所请求操作的性质。 例如,在语音邮件应用程序中,两个连续的 DTMF“1”数字可能意味着“备份两个段”或“从邮件开头重播”,具体取决于两位数字之间经过的时间。 在客户端/服务器环境中,如果 DTMF 检测是在与运行应用程序的处理器不同的处理器上执行的,则局域网中的延迟很可能使媒体事件之间的计时关系发生偏差,从而导致这些基于计时的差异可能丢失或不可靠。
若要解决此问题,可以为多个 TAPI 消息添加时间戳。 由于这些事件之间的相对计时很重要,因此事件的“时钟时间”并不重要,并且涉及亚秒计时,因此这些时间戳使用 GetTickCount 函数返回的毫秒分辨率“Windows 启动以来的时间”。 应用程序必须注意,这是服务器 (或直接管理硬件的服务提供商运行) 的计算机上的刻度计数,并且不一定是执行应用程序的同一台计算机;因此,这些 TAPI 消息中的时间戳只能相互比较,而不能与运行应用程序的处理器上的 GetTickCount 返回的值进行比较。
可带时间戳的 TAPI 消息包括: LINE_GATHERDIGITS、 LINE_GENERATE、 LINE_MONITORDIGITS、 LINE_MONITORMEDIA和 LINE_MONITORTONE。 时钟周期计数插入到这些消息的 dwParam3 中。 如果服务提供商不支持时间戳 (服务提供商将这些消息中的 dwParam3 设置为 0) ,则 TAPI 本身会将这些消息的计时周期计数插入到所有这些消息的 dwParam3 中, (它可能会稍微倾斜,但小于在消息遍历进程间通信方案) 后应用程序所做的相同。