微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

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

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

解决方法

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

请看这里MSDN.

原文地址:https://www.jb51.cc/c/119238.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐