有没有一种比秒表更准确的“睡眠”方法?或者,有没有一种方法可以使秒表类更准确?它不必使用.NET,也可以使用c ++,但是无论使用哪种语言,都必须具有1ms的准确度。我不需要那么多。假设我要让程序“睡眠” 300ms,那么我希望它至少在大多数时间都睡眠300ms。
目前,我使用:
Dim StopWatch As New StopWatch
StopWatch.Start
Do
Loop Until StopWatch.ELapsed.Milliseconds >= 300
StopWatch.Stop
Run Code Online (Sandbox Code Playgroud)
我运行5次的结果是:306、305、315、327、304。
如果我再运行它,它会保持这种状态。
我将线程和进程的优先级放在“实时” /“高”上。
秒表类具有属性IsHighResolution。如果返回“ true”,则说明您正在使用高性能事件计时器(HPET)-可用性取决于硬件和操作系统。使用此工具,您可以非常准确地测量时间。但!Windows(与通常的Linuxes)不是实时操作系统,而是使用抢占式多任务处理。只要操作系统认为需要,它将把您当前的线程on hold用于其他工作,并且在一段时间后,它将return进入您的线程并让其继续。如果这switch发生在循环内的某个位置,则您仍然可以测量正确的时间,但是它包含一定的inactivty时间。
由于time sliceWindows下的时间介于15到30毫秒之间,因此您(r线程)可能会在299毫秒和15到30毫秒后挂起,然后您将返回。这就是您所看到的效果。秒表是准确的。它只是测量您没想到的东西。
如何克服:你不能。如前所述:Windoes不是实时操作系统!即使您为流程分配了“实时”优先级。
| 归档时间: |
|
| 查看次数: |
3994 次 |
| 最近记录: |