首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时获得steady_clock和system_clock

同时获得steady_clock和system_clock
EN

Stack Overflow用户
提问于 2018-01-09 09:37:07
回答 1查看 776关注 0票数 4

我的代码看起来是:

代码语言:javascript
复制
// 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

这种情况可能会发生:

代码语言:javascript
复制
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进行一些计算。结果比减小两个时钟读数之间的抖动要好。

-

有专门的系统呼叫来做这个吗?是否有可能在一个系统呼叫中得到这两个时钟的差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-09 14:46:44

没有办法完美地做到这一点,甚至没有最好的方法。你展示的方式是好的方法之一。如果您愿意交换某些运行时,则可以通过在每个时钟上多次调用now()并对结果进行平均处理,从而在统计意义上获得更好的准确性。

例如:

代码语言:javascript
复制
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};
}

这并不一定比你所拥有的更好。但它是工具箱中另一个需要注意的工具。和往常一样,使用特定用例的测试来决定什么是对你最好的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48165154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档