这个问题不是关于在 Windows(XP 或更好)上准确地计时,而是关于通过回调或中断非常快速地做某事。
我需要每隔 1 毫秒,甚至最好每 100 微秒定期做一些事情。我需要做的是以这种速率驱动一些异步硬件(以太网)以向网络输出稳定的数据包流,并使该流看起来尽可能规则和同步。但是,如果可以将问题与(以太网)设备分开,那么知道一般答案会很好。
在您说“甚至不要考虑使用 Windows !!!!!!”之前,请先了解一下上下文。并非所有实时系统都有相同的需求。尽管需要平均每 10-16 毫秒左右处理一次音频或图像块,但大多数情况下,歌曲和视频在 Windows 上的播放是可以接受的。通过适当的缓冲,Windows 可以有其可变的延迟,但硬件可以大致不受它们的影响,并保持稳定的同步事件流发生。即便如此,我们大多数人都能容忍偶尔出现的故障。我的应用程序就是这样 - 可能非常宽容。
对我来说,昂贵的选择是将我的整个应用程序移植到 Linux。但 Linux 只是在相同硬件上运行的不同软件,所以我强烈倾向于编写一些更好的软件,并坚持使用 Windows。我有幸能够消除所有竞争的硬件和软件(没有互联网或其他网络访问,没有其他应用程序运行等)。我是否有希望让 Windows 做到这一点?我会遇到什么限制?
我知道我的目标硬件有一个高性能事件定时器,并且这个定时器可以被编程为中断,但是没有驱动程序。我可以写一个吗?那里有有用的例子吗?我还没有找到一个。这会干扰 QueryPerformanceCounter 吗?我将使用以太网设备这一事实是否意味着如果我明智地使用 select() 一切都会变得简单?
欢迎提供有用文章的指针——我发现了许多关于如何获得准确时间的概述,但除了使用相当于繁忙等待的情况外,还没有关于如何做这样的事情的概述。有没有办法避免忙碌的等待?是否有内核模式或设备驱动程序选项?