我的代码看起来是:
// 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进行一些计算。结果比减小两个时钟读数之间的抖动要好。
-
有专门的系统呼叫来做这个吗?是否有可能在一个系统呼叫中得到这两个时钟的差异?
发布于 2018-01-09 14:46:44
没有办法完美地做到这一点,甚至没有最好的方法。你展示的方式是好的方法之一。如果您愿意交换某些运行时,则可以通过在每个时钟上多次调用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};
}这并不一定比你所拥有的更好。但它是工具箱中另一个需要注意的工具。和往常一样,使用特定用例的测试来决定什么是对你最好的。
https://stackoverflow.com/questions/48165154
复制相似问题