我的代码如下:
// Next 2 lines should be at the same time
auto nowMonotonic = std::chrono::steady_clock::now();
auto nowSystem = std::chrono::system_clock::now();
// Do some calc with nowMonotonic and nowSystem
这可能发生:
auto nowMonotonic = std::chrono::steady_clock::now();
// Some other thread/process interrupts this thread for an
// unspecific amount of time...
auto nowSystem = std::chrono::system_clock::now();
// Do some calc with nowMonotonic and nowSystem
我正在研究(非实时)Linux系统。我正在根据当前steady_clock
和当前system_clock
进行一些计算。结果优于两个时钟读数之间的抖动。
在(几乎)同时读取两个时钟的最佳方法是什么?
是否有特殊的系统调用来执行此操作?是否有可能在单个系统调用中获得这两个时钟的差异?
答案 0 :(得分:2)
没有办法完美地做到这一点,甚至没有最好的办法。你展示的方式是一种好方法。如果你愿意交易一些运行时间,你可以通过在每个时钟上多次调用now()
并对结果取平均值来统计意义上获得更好的准确度。
例如:
std::pair<std::chrono::steady_clock::time_point,
std::chrono::system_clock::time_point>
combined_now()
{
using namespace std::chrono;
auto u0 = system_clock::now();
auto t0 = steady_clock::now();
auto t1 = steady_clock::now();
auto u1 = system_clock::now();
return {t0 + (t1-t0)/2, u0 + (u1-u0)/2};
}
这不一定比你拥有的更好。但它是工具箱中另一个需要注意的工具。与往常一样,使用特定用例的测试来确定最适合您的方法。