从chrono :: duration中获取unsigned int毫秒

Mar*_*ott 13 c++11 c++-chrono

对于winapi包装器,我想在给出呼叫的持续时间内使用计时器.代码示例:

bool setTimer(std::chrono::duration<std::chrono::milliseconds> duration)
{
    unsigned int dwDuration = Do some chrono magic here

    SetTimer(m_hWnd,1,dwDuration,0);
}
Run Code Online (Sandbox Code Playgroud)

dwDuration必须以毫秒为单位.

第一个问题:如何做到魔术.

第二个问题:参数声明好吗?

Cub*_*bbi 22

类型的名称是std::chrono::milliseconds,它有一个成员函数count(),返回那些毫秒的数量:

bool setTimer(std::chrono::milliseconds duration)
{
    unsigned int dwDuration = duration.count();
    return std::cout << "dwDuration = " << dwDuration << '\n';
}
Run Code Online (Sandbox Code Playgroud)

在线演示:http://coliru.stacked-crooked.com/a/03f29d41e9bd260c

如果你想要超级迂腐,count()的返回类型是 std::chrono::milliseconds::rep

如果你想处理小数毫秒,那么类型将是std::chrono::duration<double, std::milli>(并且count()的返回类型然后是double)

  • 正是我需要的答案!BTW链接背后的精彩工具.谢谢你的帮助. (2认同)

Iva*_*tyk 5

您可以使用以下代码:

auto now = chrono::high_resolution_clock::now();

auto timeMillis = chrono::duration_cast<chrono::milliseconds>(now.time_since_epoch()).count();
Run Code Online (Sandbox Code Playgroud)

  • 请不要在解释中使用“auto”关键字。我知道这是常识,但我不是编译器,我不知道返回类型。timeMillis 是 unsigned int 类型吗?另外,这不是对我的问题的直接答案,因为我已经有一个持续时间,而不是一个时间点。 (31认同)