来自多个数据源的时间

问题描述:

我有一台带有C++项目的计算机,它是发送时间戳的另一台计算机的套接字客户端,它是表示自午夜以来的毫秒数的无符号整数。来自多个数据源的时间

unsigned int time; 

如何将此时间值与系统时间进行比较,并以毫秒为单位计算两者之间的差值?价差应该随着时间的推移“相对”恒定。

系统时间的准确性必须在1毫秒内,因为如果传播扩大到(例如)20毫秒,我知道某些事情是错误的,代码需要知道。

我可以使用Windows.h 任何意见,将不胜感激,示例代码呢!

谢谢!

+0

你确定网络延迟会一直远远小于20ms的? –

+0

在你的系统上运行'ntpd'可能更容易;该文档声称[它提供的精度通常小于一毫秒,局域网和广域网上几毫秒。](http://www.eecis.udel.edu/~mills/ntp/html/index.html)。 NTP4经过几十年的设计,可以可靠地共享主机间的时间。 – sarnold

+0

最简单的答案是配置一个同步时钟的ntp服务器。我不确定同步的精确度,但它应该足够了。 –

也许这会帮助你。我在一个我在学校做的项目中使用它来比较几种算法计算最大子序列和的效率。这是一个利用Windows.h中包含的函数QueryPerformanceCounter的类,我相信它在sub-ms范围内是准确的。这是我使用Windows.h在C++中完成的最准确的方法。

我从谷歌代码的开源项目得到了它叫做gpufrustrum

#include <windows.h> 

class CPrecisionTimer 
{ 
    LARGE_INTEGER lFreq, lStart; 

public: 
    CPrecisionTimer() 
    { 
    QueryPerformanceFrequency(&lFreq); 
    } 

    inline void Start() 
    { 
    QueryPerformanceCounter(&lStart); 
    } 

    inline double Stop() 
    { 
    // Return duration in seconds... 
    LARGE_INTEGER lEnd; 
    QueryPerformanceCounter(&lEnd); 
    return (double(lEnd.QuadPart - lStart.QuadPart)/lFreq.QuadPart); 
    } 
}; 
+0

这不是问题的答案。据我所知,问题是如何估计两台不同机器的时钟之间的差异,而不是如何精确测量当地时间。 –