Windows下的C++,是否能实现微秒级别的休眠?

3

在Windows环境下,是否有任何方法可以让程序休眠约1微秒?经过研究和阅读许多线程和各种网站后,我没有看到这是可能的。由于调度程序似乎是限制因素,并且它在1毫秒级别操作,所以我认为如果不使用实时操作系统,则无法完成。


2
我觉得你已经回答了自己的问题。我不明白为什么你选择哪种编程语言在这里真的很重要。 - Karl Knechtel
那会是什么使用案例呢? - Karoly Horvath
你可以进行一些忙等待。 - Nobody moving away from SE
如果您需要进行需要微秒精度的操作,您几乎会使用专用设备(即微控制器或FGPA),而不是通用PC。 - In silico
你是否看过MMCSS,以便从高优先级线程中获得更加实时的行为?http://msdn.microsoft.com/en-us/library/ms684247%28v=VS.85%29.aspx - selbie
2个回答

1

这可能不是最便携的,而且我自己也没有使用过这些函数,但是在此链接的高分辨率计时器部分和块中可能可以使用信息:QueryPerformanceCounter


谢谢,我会研究上面提出的各种建议。 - Al Kurlansky

1

尽管Windows被认为不是“实时”操作系统,但事件可以以微秒分辨率生成。在其他地方已经描述了使用系统时间(file_time)和性能计数器频率的组合。然而,仔细实现并注意处理器亲和力和进程/线程优先级,就可以打开微秒分辨率定时事件的大门。

由于Windows调度程序和Windows计时器服务依赖于系统中断机制,因此微秒只能通过轮询进行调整。特别是在多核系统上,轮询不再那么丑陋。而且轮询只需要持续最短的可能中断周期。多媒体计时器接口允许将中断周期降至约1毫秒,因此可以接近所需的(微秒分辨率)时间,并且轮询最多持续1毫秒。

我在Windows上实现了微秒分辨率时间服务、测试代码和详细说明,可以在位于windowstimestamp.com的Windows Timestamp项目中找到。


1
如果你在回答中推广与你有关联的产品/网页,你应该在其中披露你的关联。 - IInspectable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接