我有一个具有此签名的函数:

void checkTime (const std::chrono::time_point<std::chrono::system_clock> &time)
{
   //do stuff...
}

我需要像这样调用上面的函数:
void wait_some_time (unsigned int ms)
{
    //do stuff...
    checkTime(ms); //ERROR: How can I cast unsigned int to a time_point<system_clock> as now() + some milliseconds?
    //do more stuff...
}

我想这样使用:
wait_some_time(200); //wait now + 200ms

问题:

如何将'unsigned int'强制转换为具有毫秒值的const std::chrono::time_point?

谢谢!

最佳答案

如何将'unsigned int'转换为具有毫秒值的const std::chrono::time_point?
time_point是一个时间点,表示为某个时期的偏移量(time_point的“零”值)。对于system_clock,纪元是1970年1月1日00:00:00。

您的unsigned int只是一个偏移量,无法将其直接转换为time_point,因为它没有与之关联的历元信息。

因此,回答“如何将unsigned int转换为time_point?”这个问题。您需要知道unsigned int代表什么。自纪元开始以来的秒数?自您上次调用该函数以来的小时数?从现在开始几分钟?

如果要表示的是“现在+ N毫秒”,则N对应于duration,以毫秒为单位测量。您可以使用std::chrono::milliseconds(ms)轻松地将其转换为milliseconds(其中std::chrono::duration<long long, std::milli>类型是duration之类的typedef,即表示为有符号整数类型的持续时间,以1000秒为单位)。

然后,要获取与“now + N毫秒”相对应的time_point,只需将time_point添加到从相关时钟获得的“now”的ojit_code值中:

    std::chrono::system_clock::now() + std::chrono::milliseconds(ms);

关于c++11 - C++ 11 Chrono-如何将'unsigned int'转换为time_point <system_clock>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31401560/

10-15 06:07