可以安排一些事情来获得 Windows Server 2008 上的可靠处理时间。其中一些是:
避免CPU负载过重。
安排代码的小内存占用。
设置进程优先级和线程优先级高。REALTIME_PRIORITY_CLASS
甚至可能分别与和一样高THREAD_PRIORITY_TIME_CRITICAL
。
设置线程关联掩码以避免时间关键部分在Core 0
. Core 0 专用于一些系统服务。使用不同的代码可以避免依赖。
Sleep(0)
适时使用。Sleep(0) 是一个异步服务,它强制调度程序做出反应。通过这种方式,您可以触发调度程序,该调度程序将选择您的进程/线程以立即获取 CPU,因为它具有最高优先级。
确保代码也确实为其他服务留出了时间。最高优先级将导致所有其他线程基本停止。(没有鼠标事件或任何将被处理)
可能通过多媒体定时器 API 增加系统中断频率。使用timeGetDevCaps函数查询系统允许的最大中断频率,并在结构体中使用timeBeginPeriod和wPeriodMin
返回的 by 。这将强制您的系统以最大中断频率运行。完成后不要忘记通过调用timeEndPeriod来释放多媒体计时器资源。timeBeginPeriod
TIMECAPS
当认真遵循这些规则时,可以获得非常高可靠性的 10 微秒范围内的准确计时。然而,上述所有因素的总和导致了一些复杂性。因此,永远无法提供保证。但即使在 RTOS 系统上也没有这样的保证。当编码没有正确完成时,无论调用什么/如何调用操作系统,事情都不会按照他们应该做的方式工作。可以在此处找到更多注释和等效 .Net 服务的链接。
考虑到所有这些,可以将时间同步(精确时间协议)的实现时间缩短到 10 微秒。
精确时间协议开发人员常见问题解答可在此处找到。
在要求 Linux 后进行编辑:有一些可用的软件包,例如这个。这里报告的典型精度也在 10 到 100 微秒范围内。
毫不奇怪,在可比较的标准硬件上运行时,Windows 和 Linux 的结果非常相似。两者都不能做任何魔术。