我记录时间戳在我的程序与下面的代码块:一致时间戳与标准::计时
// Taken at relevant time
m.timestamp = std::chrono::high_resolution_clock::now().time_since_epoch();
// After work is done
std::size_t secs = std::chrono::duration_cast <std::chrono::seconds> (timestamp).count();
std::size_t nanos = std::chrono::duration_cast<std::chrono::nanoseconds> (timestamp).count() % 1000000000;
std::time_t tp = (std::time_t) secs;
std::string mode;
char ts[] = "yyyymmdd HH:MM:SS";
char format[] = "%Y%m%d %H:%M:%S";
strftime(ts, 80, format, std::localtime(&tp));
std::stringstream s;
s << ts << "." << std::setfill('0') << std::setw(9) << nanos
<< " - " << message << std::endl;
return s.str();
我比较这些由一个精确的远程源记录时间戳。当时间戳的差异被绘制并且ntp没有被启用时,整天都有一个线性漂移(每30秒左右700微秒)。
校正线性漂移后,我发现有一个非线性元件。它可以在几个小时内进出数百微秒。
第二幅图看起来类似于如上相同的方法拍摄的图形,但启用NTP。数据中预计会出现大的垂直尖峰,但最小的摆动是令人惊讶的。
有没有办法获得更精确的时间戳,但保留微秒/纳秒分辨率?如果时钟以可预测的方式从实际时间漂移,那么可以,但时间戳在长时间内需要内部一致。
这不是一个真正的C++问题,因为std :: chrono函数只是从您的操作系统/硬件中获取时间。它似乎更可能是关于你的硬件。 –
上次我查看C++(特别是微软)支持的“高分辨率定时器”是“iffy”这个Q/A http://stackoverflow.com/questions/26003413/stdchrono-or-boostchrono-support-for-clock-尽管我试图实现不同的目标,但单调 - 粗糙可能是有趣的。 –