如何将 std::chrono::system_clock::duration 转换为 struct timeval

2024-03-04

标题说明了一切。

我必须实现一个接收 std::chrono::system_clock::duration 值的函数,并且需要将其转换为 timeval 结构,以便我可以将其传递给某些系统函数。


更一般的实施。

template<typename Duration>
void to_timeval(Duration&& d, struct timeval & tv) {
    std::chrono::seconds const sec = std::chrono::duration_cast<std::chrono::seconds>(d);

    tv.tv_sec  = sec.count();
    tv.tv_usec = std::chrono::duration_cast<std::chrono::microseconds>(d - sec).count();
}

UPDATE:

单独的方法,例如to_timeval()都不太方便。超载电源在哪里?我们刚刚硬编码了类型timeval进入函数名称to_timeval()。这不是 C++ 的方式。我想通过struct timeval例如,std::chrono::duration_cast()并得到我的chrono-结果,反之亦然。

所以,我们可以扩展std::chrono::duration_cast(当然,风险由您自己承担)。享受。

namespace std {
namespace chrono {
namespace detail {

template<typename From, typename To>
struct posix_duration_cast;

// chrono -> timeval caster
template<typename Rep, typename Period>
struct posix_duration_cast< std::chrono::duration<Rep, Period>, struct timeval > {

    static struct timeval cast(std::chrono::duration<Rep, Period> const& d) {
        struct timeval tv;

        std::chrono::seconds const sec = std::chrono::duration_cast<std::chrono::seconds>(d);

        tv.tv_sec  = sec.count();
        tv.tv_usec = std::chrono::duration_cast<std::chrono::microseconds>(d - sec).count();

        return std::move(tv);
    }

};

// timeval -> chrono caster
template<typename Rep, typename Period>
struct posix_duration_cast< struct timeval, std::chrono::duration<Rep, Period> > {

    static std::chrono::duration<Rep, Period> cast(struct timeval const & tv) {
        return std::chrono::duration_cast< std::chrono::duration<Rep, Period> >(
                    std::chrono::seconds(tv.tv_sec) + std::chrono::microseconds(tv.tv_usec)
                    );
    }

};

}

// chrono -> timeval    
template<typename T, typename Rep, typename Period>
auto duration_cast(std::chrono::duration<Rep, Period> const& d)
-> std::enable_if_t< std::is_same<T, struct timeval>::value, struct timeval >
{
    return detail::posix_duration_cast< std::chrono::duration<Rep, Period>, timeval >::cast(d);
}

// timeval -> chrono
template<typename Duration>
Duration duration_cast(struct timeval const& tv) {
    return detail::posix_duration_cast< struct timeval, Duration >::cast(tv);
}

} // chrono
} // std

这只是一个例子。作为替代方案,我们可以实现自己的duration_cast()在某些情况下将其转发到std::chrono::duration_cast().

我们还记得struct timespec.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 std::chrono::system_clock::duration 转换为 struct timeval 的相关文章

随机推荐

  • GCC 的代码覆盖率选项如何工作?

    考虑以下命令 gcc fprofile arcs ftest coverage main c 它生成文件 main gcda gcov 将使用该文件来生成覆盖率分析 那么main gcda是如何生成的呢 仪器仪表是如何完成的 我可以看到检测
  • 如何利用foreman向暴发户导出?

    我正在尝试将我的应用程序导出到另一种流程管理格式 系统 具体来说 upstart http upstart ubuntu com 在这样做的过程中 我遇到了许多障碍 主要是由于缺乏文档 作为非 root 用户 我运行了以下命令 如图所示he
  • System.Json.DLL 在哪里?

    我试图遵循一些在 Http 客户端中使用 JSON 的示例 但它们引用了我找不到的 System Json DLL 看这个参考 http msdn microsoft com en us library system json jsonob
  • django - 一个模板中有 2 个视图

    我有两个不同的视图 它们从数据库获取过滤数据 我必须在一个模板文件 admin html 中使用这些视图 但我不能同时在一页上使用多个视图 这是我的观点1 draft list Post objects filter isdraft Tru
  • 调整字体大小以填充 UITextView?

    如何设置 UITextView 中文本的字体大小 使其填充整个 UITextView 我希望用户输入文本 然后让文本填充整个 UITextView 任何帮助表示赞赏 我已经转换了痴呆症的答案 https stackoverflow com
  • 在 Android 中创建手势

    你好 我正在关注这个教程 http www vogella de articles AndroidGestures article html http www vogella de articles AndroidGestures arti
  • 为什么 Codeception 为每个 test* 方法创建新的 \Test 实例?

    作为基础 我使用 Codeception TestCase Test 类 我注意到 对于类中定义的每个 test 方法 codeception 都会重新创建 TestCase Test 类 But Why 结果我不能使用类字段 public
  • contenteditable 选择文本不起作用

    我面临以下问题 当我尝试在 a 中选择文本时contenteditable元素并且选择的结束是元素内容的开始 那么不会触发 select 事件 并且没有Selection and Range对象 有人可以就为什么会发生这种情况或如何防止这种
  • 如何在 docker 镜像中配置 Let's 为 nginx 加密证书?

    我知道怎么做配置让我们为 nginx 加密 https www digitalocean com community tutorials how to secure nginx with let s encrypt on ubuntu 14
  • Pandas 多索引计数级别

    数据 index A aa aaa A aa aab B bb bbb B bb bbc C cc ccc values 0 07 0 04 0 04 0 06 0 07 s pd Series data values index pd M
  • 如何阻止 Windbg 成为交互式调试器?

    正确的撤消方法是什么Windbg I在 Vista Win7 上 难道只是删除 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows NT CurrentVersion AeDebug 中的注册表项那么
  • React/Redux 应用程序中组件的权限检查

    我正在尝试与构建 React 应用程序的团队合作 并尝试找出创建 高阶 React 组件 一个包装另一个组件 的最佳方法 以与 Redux 数据存储结合执行身份验证 到目前为止 我的方法是创建一个由一个函数组成的模块 该函数根据是否存在经过
  • 接收和处理电子邮件:Heroku、Sendgrid,可能还有 Mailman

    我的应用程序为每个用户创建一个唯一的电子邮件 用户将电子邮件发送到该地址进行处理 使用 Sendgrid 我已将传入电子邮件通过管道传输到我的域 托管在 Heroku 上 的地址 site com receive email 我使用 收件人
  • JellyBean 上的向上导航损坏了?

    源代码可在此处获取 https github com novemberox NavigationTest https github com novemberox NavigationTest这是该示例的修改版本 http developer
  • StretchDIBits 看起来很慢,有没有更快的 API?

    我想在 HDC 上绘制一个相同大小的 dib 我在用 des 和 src 大小相同 StretchDIBits hdc des left des top des right des left des bottom des top src l
  • sizeof 的成本是多少?

    sizeof 的成本是多少 我期望 sizeof someclass 可以在编译时知道 sizeof someStaticArray 可以在编译时知道 sizeof someDynamicArray 可以not在编译时已知 那么最后一个案例
  • 在 C++ 中将成员函数指针“转换”为函数指针的最简单方法是什么?

    我想为 STL 算法的 comp 参数提供一个成员函数 例如 lower bound Compare comp comp 函数访问非静态成员字段 因此它本身必须是非静态成员 但非静态成员函数指针的类型与普通函数指针的类型不同 解决这个问题的
  • 使用 install_github 安装 SparkR 包时出错

    我正在尝试使用SparkRR 中的包 我有所有依赖包 例如devtools Rtools exe etc 当我尝试以下命令时 install github amplab extras SparkR pkg subdir pkg 我收到以下错
  • 在单个主机上使用多个密钥时 SSH 使用错误的密钥

    我目前正在尝试为单个主机创建多个密钥 但遇到了一个奇怪的问题 我决定使用的第一个 SSH 密钥成为我可以使用的唯一 SSH 密钥 然后我必须重新启动笔记本电脑才能更改 SSH 密钥 我使用的是配备 Mojave v10 14 6 的 Mac
  • 如何将 std::chrono::system_clock::duration 转换为 struct timeval

    标题说明了一切 我必须实现一个接收 std chrono system clock duration 值的函数 并且需要将其转换为 timeval 结构 以便我可以将其传递给某些系统函数 更一般的实施 template