C++11 从chrono::duration中获取无符号整数毫秒

C++11 从chrono::duration中获取无符号整数毫秒,c++11,chrono,C++11,Chrono,对于winapi包装,我希望在给定的调用持续时间内使用chrono。代码示例: bool setTimer(std::chrono::duration<std::chrono::milliseconds> duration) { unsigned int dwDuration = Do some chrono magic here SetTimer(m_hWnd,1,dwDuration,0); } bool设置计时器(std::chrono::duration)

对于winapi包装,我希望在给定的调用持续时间内使用chrono。代码示例:

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

    SetTimer(m_hWnd,1,dwDuration,0);
}
bool设置计时器(std::chrono::duration)
{
unsigned int dwDuration=在这里做一些计时魔术
设置计时器(m_hWnd,1,dwDuration,0);
}
dwDuration必须以毫秒为单位

第一个问题:怎样才能变魔术


第二个问题:参数声明是否正确?

您可以使用以下代码:

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

auto timeMillis = chrono::duration_cast<chrono::milliseconds>(now.time_since_epoch()).count();
auto now=chrono::高分辨率时钟::now();
auto timeMillis=chrono::duration_cast(now.time_since_epoch()).count();

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

bool setTimer(std::chrono::milliseconds duration)
{
    unsigned int dwDuration = duration.count();
    return std::cout << "dwDuration = " << dwDuration << '\n';
}
bool设置计时器(std::chrono::毫秒持续时间)
{
unsigned int dwDuration=duration.count();

return std::cout请不要使用“自动”关键字内部解释。我知道这是常识,但我不是编译器,我不知道返回类型。timeMillis的类型是unsigned int吗?而且,它不是我问题的直接答案,因为我已经有了一个持续时间,而不是时间点。正是我需要的答案!顺便说一句,链接背后有一个很棒的工具。谢谢帮助。@MartinSchlott注意到这很有趣采用持续时间的操作通常是函数模板,根据持续时间的参数进行参数化,例如,在这种函数中,您可以将持续时间转换为毫秒。您的函数只能在持续时间隐式转换为毫秒的情况下调用(例如,
)这是故意的,因为我想接近winapi。但是你建议使用哪种参数类型?或者我必须将函数转换为模板吗?目标winapi函数当然只接受毫秒。这取决于你想要的接口。这是你根据需要选择的。我认为没有一般的最佳选择。如果在接口中放入毫秒,则调用者将被迫自行处理截断/舍入(这意味着他们可以选择);如果放入模板,则必须自己进行选择。在my IDE中,
std::chrono::millides
类型不是
std::chrono::duration
,而是
std::chrono::duration