使用计时将time_point转换为特定持续时间
converting time_point to specific duration with chrono
/*definition of start and end
std::chrono::time_point<std::chrono::system_clock> start;
std::chrono::time_point<std::chrono::system_clock> _end;
*/
std::chrono::time_point<std::chrono::system_clock> someclass::spf()
{
_end = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> time(_end-start);
start = std::chrono::system_clock::now();
return time;
}
unsigned int someclass::secs()
{
return std::chrono::duration_cast<std::chrono::seconds>(spf()).count();
}
编译器给了我调用duration_cast
的错误。确切错误:
error: no matching function for call to ‘duration_cast(std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000000l> > >)’
时间点(std::chrono::time_point<...>
)不是持续时间(std::chrono::duration<...>
,例如std::chrono::seconds
是一个typedef)。
它们是不同的类型。
您正在尝试转换持续时间,但 spf 返回time_point。持续时间是 2 time_point之间的时间。因此,要从time_point获得持续时间,您需要另一个time_point并获取这些time_points之间的持续时间。
所以这里的错误都是在 spf 返回time_point而不是持续时间,并且这一行是错误的:
std::chrono::time_point<std::chrono::system_clock> time(_end-start);
你显然想要一个持续时间,但建立一个time_point。请改为执行以下操作:
const auto time_since_start = _end - start;
//...
return time_since_start; // you might need a duration cast here depending on what spf() will return.
因此,spf() 的返回类型必须是持续时间,例如秒或毫秒或任何您想要的。
相关文章:
- 从持续时间构造std::chrono::system_clock::time_point
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 将字符数组转换为时间结构
- 时间持续时间到时间字符串
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 将毫秒转换为给定格式的持续时间
- 具有静态存储持续时间的常量初始化变量的初始化顺序
- 如何将 time-uuid(存储在 boost uuid 中)转换为时间戳/自纪元以来的时间?
- 划分和乘以STD :: Chrono ::持续时间
- 静态存储持续时间初始化
- C++计划持续时间内(字体)资源的分配
- 无法将 int 类型转换为时间类型(我的类类型)
- FFMPEG:具有不同持续时间的多路复用流
- 如何在C++中将无符号的 int 64 转换为时间
- 在不同翻译单元中具有静态存储持续时间的依赖非局部常量浮点变量的常量初始化
- 使用System_Clock :: TO_TIME_T警告持续时间_t
- 从 time_point + 持续时间到持续时间的强制转换在叮当声中失败
- 使用计时将time_point转换为特定持续时间
- 在时间::持续时间类型之间转换,其中两个分母的LCM都很大