使用计时将time_point转换为特定持续时间

converting time_point to specific duration with chrono

本文关键字:转换 持续时间 point time      更新时间:2023-10-16
/*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() 的返回类型必须是持续时间,例如秒或毫秒或任何您想要的。