我有两个用.NET编写的程序,通过USB与采集硬件通信。一个设备是异步的,但它告诉我记录数据点时的微秒。另一个是同步的,也就是说,我知道每个数据点的记录时间。
我有.NET程序与这些接口。到目前为止,我已经使用DateTime.Now来确定何时开始采集,然后使用异步设备报告的毫秒/微秒时间和来自同步设备的样本编号来计算每个数据点的计算机时间(通过添加刻度到开始时间)。
现在我必须同步两次收购的时间。这两个程序在同一台计算机上运行,但正如我一直在阅读的那样,根据一些文档,DateTime.Now的准确度为10到15毫秒(尽管似乎有几个人可以比这更好地实现,尽管可以说只是因为他们在Thread.Sleep之后调用它。
据我所知,我现在的方法是:
可以让我的采集开始时间低至15毫秒。
我可以考虑在程序启动时使用DateTime.Now,并使用StopWatch记录程序启动和采集开始之间的确切经过时间。但这只有在我将两个程序合并在一起时才有效。
还有其他想法吗?
答案 0 :(得分:2)
StopWatch有一个GetTimeStamp()方法,您可以使用它来进行同步。它基本上使用其中的Windows API。您最终会获得long类型的tick号,StopWatch.Frequency是您机器上每秒的滴答数,如果您想转换为秒。