c – 如何在Windows上每毫秒或更好地执行某些操作

这个问题不是关于在 Windows(XP或更好)上准确计时,而是通过回调或中断非常快速地做某事.

我需要每1毫秒定期做一些事情,或者最好每100微秒做一次.我需要做的是以这个速率驱动一些同步硬件(以太网),以便向网络输出稳定的数据包流,并使该流看起来尽可能规则和同步.但如果问题可以从(以太网)设备中分离出来,那么了解一般答案会更好.

在你说“甚至不考虑使用Windows !!!!”之前,有点背景.并非所有实时系统都有相同的要求.大多数时候歌曲和视频在Windows上可以接受,尽管平均每10-16ms左右需要处理音频或图像块.通过适当的缓冲,Windows可以具有可变的延迟,但硬件可以广泛地免受它们的影响,并保持稳定的同步事件流.即便如此,我们大多数人都容忍偶尔的故障.我的应用就是这样 – 可能非常宽容.

对我来说,昂贵的选择是将我的整个应用程序移植到Linux.但Linux只是在同一硬件上运行的不同软件,所以我强烈倾向于编写一些更好的软件,并坚持使用Windows.我能够消除所有竞争的硬件和软件(没有互联网或其他网络访问,没有运行其他应用程序等).我有可能让Windows这样做吗?我会遇到什么限制?

我知道我的目标硬件有一个性能事件定时器,并且该定时器可以编程为中断,但没有驱动程序.我可以写一个吗?那里有有用的例子吗?我还没有找到一个.这会干扰QueryPerformanceCounter吗?我将要使用以太网设备的事实是否意味着如果我明智地使用select()会变得简单吗?

欢迎使用有用文章的指针 – 我已经找到了关于如何获得准确时间的几十个概述,但是除了使用等于忙碌的等待之外,还没有关于如何做这样的事情的概述.有没有办法避免忙碌的等待?是否有内核模式或设备驱动程序选项?

解决方法

您应该考虑查看多媒体计时器.这些定时器旨在达到您正在考虑的那种分辨率.

请看这里MSDN.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...