timeconv.inl

来自「Boost provides free peer-reviewed portab」· INL 代码 · 共 131 行

INL
131
字号
// Copyright (C) 2001-2003// William E. Kempf////  Distributed under the Boost Software License, Version 1.0. (See accompanying //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)// boostinspect:nounnamednamespace {const int MILLISECONDS_PER_SECOND = 1000;const int NANOSECONDS_PER_SECOND = 1000000000;const int NANOSECONDS_PER_MILLISECOND = 1000000;const int MICROSECONDS_PER_SECOND = 1000000;const int NANOSECONDS_PER_MICROSECOND = 1000;inline void to_time(int milliseconds, boost::xtime& xt){    int res = 0;    res = boost::xtime_get(&xt, boost::TIME_UTC);    assert(res == boost::TIME_UTC);    xt.sec += (milliseconds / MILLISECONDS_PER_SECOND);    xt.nsec += ((milliseconds % MILLISECONDS_PER_SECOND) *        NANOSECONDS_PER_MILLISECOND);    if (xt.nsec >= NANOSECONDS_PER_SECOND)    {        ++xt.sec;        xt.nsec -= NANOSECONDS_PER_SECOND;    }}#if defined(BOOST_HAS_PTHREADS)inline void to_timespec(const boost::xtime& xt, timespec& ts){    ts.tv_sec = static_cast<int>(xt.sec);    ts.tv_nsec = static_cast<int>(xt.nsec);    if(ts.tv_nsec >= NANOSECONDS_PER_SECOND)    {        ts.tv_sec += ts.tv_nsec / NANOSECONDS_PER_SECOND;        ts.tv_nsec %= NANOSECONDS_PER_SECOND;    }}inline void to_time(int milliseconds, timespec& ts){    boost::xtime xt;    to_time(milliseconds, xt);    to_timespec(xt, ts);}inline void to_timespec_duration(const boost::xtime& xt, timespec& ts){    boost::xtime cur;    int res = 0;    res = boost::xtime_get(&cur, boost::TIME_UTC);    assert(res == boost::TIME_UTC);    if (boost::xtime_cmp(xt, cur) <= 0)    {        ts.tv_sec = 0;        ts.tv_nsec = 0;    }    else    {        ts.tv_sec = xt.sec - cur.sec;        ts.tv_nsec = xt.nsec - cur.nsec;        if( ts.tv_nsec < 0 )        {            ts.tv_sec -= 1;            ts.tv_nsec += NANOSECONDS_PER_SECOND;        }        if(ts.tv_nsec >= NANOSECONDS_PER_SECOND)        {            ts.tv_sec += ts.tv_nsec / NANOSECONDS_PER_SECOND;            ts.tv_nsec %= NANOSECONDS_PER_SECOND;        }    }}#endifinline void to_duration(boost::xtime xt, int& milliseconds){    boost::xtime cur;    int res = 0;    res = boost::xtime_get(&cur, boost::TIME_UTC);    assert(res == boost::TIME_UTC);    if (boost::xtime_cmp(xt, cur) <= 0)        milliseconds = 0;    else    {        if (cur.nsec > xt.nsec)        {            xt.nsec += NANOSECONDS_PER_SECOND;            --xt.sec;        }        milliseconds = (int)((xt.sec - cur.sec) * MILLISECONDS_PER_SECOND) +            (((xt.nsec - cur.nsec) + (NANOSECONDS_PER_MILLISECOND/2)) /                NANOSECONDS_PER_MILLISECOND);    }}inline void to_microduration(boost::xtime xt, int& microseconds){    boost::xtime cur;    int res = 0;    res = boost::xtime_get(&cur, boost::TIME_UTC);    assert(res == boost::TIME_UTC);    if (boost::xtime_cmp(xt, cur) <= 0)        microseconds = 0;    else    {        if (cur.nsec > xt.nsec)        {            xt.nsec += NANOSECONDS_PER_SECOND;            --xt.sec;        }        microseconds = (int)((xt.sec - cur.sec) * MICROSECONDS_PER_SECOND) +            (((xt.nsec - cur.nsec) + (NANOSECONDS_PER_MICROSECOND/2)) /                NANOSECONDS_PER_MICROSECOND);    }}}// Change Log://    1 Jun 01  Initial creation.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?