有问题的软件是本机 C++/MFC 应用程序,它通过 UDP 接收大量数据,然后处理数据以进行显示、声音输出和写入磁盘等。当应用程序的 CHM 帮助文档从其帮助菜单启动时,我第一次遇到问题,然后我在从硬件收集数据时单击帮助文档。为了复制这一点,使用 AutoHotkey 脚本在应用程序运行时快速单击帮助文档。一旦系统上出现任何声音,我就开始出错。
如果我完全禁用了声卡,则一切正常,没有错误,尽管声音输出显然被禁用。但是,如果我有声音播放(在这个应用程序中,不同的应用程序,甚至只是来自消息框的哔哔声),我会收到数千个丢弃的数据包(我们知道这一点,因为每个数据包都有时间戳)。作为第二个测试,我根本没有使用我的应用程序,只是使用 Wireshark 来监视来自硬件的传入数据包。果然,每当在 Windows 中播放声音时,我们都会丢包。事实上,声音甚至不必主动播放来导致错误。如果我只是创建一个缓冲区(使用 DirectSound8)并且从不开始播放,我仍然会收到这些错误。
这发生在具有多种网卡(光纤和 RJ45)和声卡(集成卡和独立卡)组合的多台 PC 上。我还为每个 NIC 和声卡尝试了不同的驱动程序版本。所有测试均在 Windows 7 32 位上进行。由于我的应用程序将 DirectSound 用于音频,因此我尝试了不同的 CooperativeLevels(正常操作是 DSSCL_PRIORITY)但没有成功。
在这一点上,我非常确信它与我的应用程序无关,并且想知道在我开始与硬件供应商和/或 Microsoft 打交道之前是否有人知道可能导致此问题的原因。