我需要测量串口上字符事件之间的时间,最好是在Windows 7下
我已经在不同的地方阅读过诸如“ Windows将不会提供超过10毫秒的分辨率”这样的陈述,但我无法找出真正的含义。
问题是操作系统不能更准确地提供事件,还是定时功能(用于测量)曾经是“差”? (我在想GetTickCount)
如果是后者,那么我想我应该能够使用像QueryPerformanceCounter这样的东西进行足够好的测量,但是如果事件没有以类似的精度传递,那显然无济于事。
答案 0 :(得分:1)
我认为10毫秒的时间是由于任务切换造成的。即使您的计时应用程序是唯一运行的用户任务,仍然有许多系统任务可能会被切换。
最重要的是,我猜测接收端口上的字符和接收DataReceived
事件(或任何您想要的软件通知)之间的时间变化很大。 UART芯片可能不会在它感觉到它之前中断CPU(通常当它的FIFO已满或某些超时到期时),然后内核可能会决定花一些时间将该中断信息发送到您的应用程序。因此,即使您可以在软件中使用高分辨率计时器,您也可能受到硬件/内核级别变化的影响。
答案 1 :(得分:0)
秒表可以用来获得更高的定时分辨率。这是在System.Diagnostics中,其Elapsed字段(Timespan)的分辨率为100纳秒(我希望它足够准确!)。 我使用C ++ Builder并经常输入这样的代码:
#include <Diagnostics.hpp>
TStopwatch SW;
TTimeSpan TS;
SW = TStopwatch::StartNew();
// Do something we need timed here ...
SW.Stop();
TS = SW.Elapsed;
Caption="That took "+String(TS.Minutes)+" Minutes, "+String(TS.Seconds)+" Seconds."+String(TS.Milliseconds)+" mS.";
有关详细信息,请参阅MSDN页面的链接:
https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch(VS.110).aspx