C++如何使用std::chrono::duration作为函数参数

C++如何使用std::chrono::duration作为函数参数

模板

std::chrono::duration是模板类,签名是std::chrono::duration<Rep, Period>,Rep是时间类型,Period是时间长度

错误示范

void fun(const std::chrono::seconds& value){}
void fun(const std::chrono::milliseconds& value){}
......

这样使用会很麻烦,涉及到类型转换,尤其和c语言的有关时间的结构体使用时不仅要写出多种std::chrono::duration的函数签名,还有可能在自动类型转换时溢出.

标准库的使用方法

在C++标准库中,this_thread::sleep_for函数是这样使用的,重点在类型转换的两行,优雅方便!

auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
	auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
template<typename _Rep, typename _Period>
      inline void
      sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
      {
	if (__rtime <= __rtime.zero())
	  return;
	auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
	auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
#ifdef _GLIBCXX_USE_NANOSLEEP
	__gthread_time_t __ts =
	  {
	    static_cast<std::time_t>(__s.count()),
	    static_cast<long>(__ns.count())
	  };
	while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR)
	  { }
#else
	__sleep_for(__s, __ns);
#endif
      }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值