我有一臺帶有C++項目的計算機,它是發送時間戳的另一臺計算機的套接字客戶端,它是表示自午夜以來的毫秒數的無符號整數。來自多個數據源的時間
unsigned int time;
如何將此時間值與系統時間進行比較,並以毫秒爲單位計算兩者之間的差值?價差應該隨着時間的推移「相對」恆定。
系統時間的準確性必須在1毫秒內,因爲如果傳播擴大到(例如)20毫秒,我知道某些事情是錯誤的,代碼需要知道。
我可以使用Windows.h 任何意見,將不勝感激,示例代碼呢!
謝謝!
我有一臺帶有C++項目的計算機,它是發送時間戳的另一臺計算機的套接字客戶端,它是表示自午夜以來的毫秒數的無符號整數。來自多個數據源的時間
unsigned int time;
如何將此時間值與系統時間進行比較,並以毫秒爲單位計算兩者之間的差值?價差應該隨着時間的推移「相對」恆定。
系統時間的準確性必須在1毫秒內,因爲如果傳播擴大到(例如)20毫秒,我知道某些事情是錯誤的,代碼需要知道。
我可以使用Windows.h 任何意見,將不勝感激,示例代碼呢!
謝謝!
也許這會幫助你。我在一個我在學校做的項目中使用它來比較幾種算法計算最大子序列和的效率。這是一個利用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);
}
};
這不是問題的答案。據我所知,問題是如何估計兩臺不同機器的時鐘之間的差異,而不是如何精確測量當地時間。 –
你確定網絡延遲會一直遠遠小於20ms的? –
在你的系統上運行'ntpd'可能更容易;該文檔聲稱[它提供的精度通常小於一毫秒,局域網和廣域網上幾毫秒。](http://www.eecis.udel.edu/~mills/ntp/html/index.html)。 NTP4經過幾十年的設計,可以可靠地共享主機間的時間。 – sarnold
最簡單的答案是配置一個同步時鐘的ntp服務器。我不確定同步的精確度,但它應該足夠了。 –