2011-03-02 44 views
1

我有两个用.NET编写的程序,它们通过USB与采集硬件进行通信。一个设备是异步的,但是当数据点被记录时,它告诉我微秒。另一个是同步的,也就是说,我知道每个数据点的记录时间。两个进程之间的时间同步 - .NET

我有.NET程序来与这些接口。到目前为止,我已经使用DateTime.Now来确定何时开始采集,然后使用异步设备报告的毫秒/微秒时间和同步设备的采样编号来计算每个数据点的计算机时间(通过将滴答添加到开始时间)。

现在我必须同步两次收购的时间。这两个程序在同一台计算机上运行,​​但正如我一直在阅读的,根据某些文档,DateTime.Now的准确度为10到15毫秒(尽管看起来好几个人可以实现比这更好的效果,尽管可以说只是因为他们在Thread.Sleep之后正确地调用它)。

所以据我所知,我目前的方法:

  1. 用户开始对设备1.收购DateTime.Now叫
  2. 用户对设备2 DateTime.Now叫
  3. 开始收购

可以使我的采集开始时间缩短到15毫秒。

我可以考虑在程序启动时使用DateTime.Now,并使用StopWatch记录程序启动和采集开始之间的确切运行时间。但是,如果我将这两个程序合并在一起,这只会起作用。

还有其他想法吗?

回答

2

StopWatch有一个GetTimeStamp()方法可用于执行同步。它基本上使用它内部的Windows API。如果你想转换为秒,你最终会得到一个long类型的tick值,StopWatch.Frequency是你的机器上每秒的tick值。

+0

这就是我说的吗? – pelesl 2011-03-03 02:34:31

+0

我以为你只是使用秒表来衡量流逝的时间,而不是得到一个实际的时间戳? – Carlos 2011-03-03 10:29:20

+0

我还没有使用StopWatch。我正在考虑将DateTime.Now和StopWatch.GetElapsed结合起来,这样我只能得到Now的不确定性,每次之后,我都会得到GetElapsed的准确性。只是想知道是否有更好的方法。 – pelesl 2011-03-04 02:38:23