1

我一直在研究一个分析器,它使用 boost chrono 以微秒为单位对函数进行计时,它适用于小函数,但我倾向于用更大的函数获得非常高的数字。

想象以下场景

boost::chrono::duration<long long, boost::micro> us1(300);
boost::chrono::duration<long long, boost::micro> us2(200000);

std::cout << boost::chrono::duration_short << "us1: " << us1 << ", us2: " << us2;

输出将如下所示

us1:300 us,us2:200000 us

这可能变得难以量化,所以我想知道是否有办法四舍五入到更高的单位,以便输出看起来像

us1:300 毫秒,us2:200 毫秒

4

1 回答 1

3

谢谢大家,我是这样解决的:

const std::string readableDuration(const boost::chrono::duration<long long, boost::micro>& duration)
{
    std::stringstream stream;
    int digits = calcNumDigits(duration.count());

    stream << boost::chrono::duration_short;

    if (digits <= 3) {
        stream << duration;
    } else if ((digits > 3) && (digits <= 6)) {
        stream << boost::chrono::duration_cast<boost::chrono::milliseconds>(duration);
    } else if ((digits > 6) && (digits <= 9)) {
        stream << boost::chrono::duration_cast<boost::chrono::seconds>(duration);
    } else if (digits > 9)
    {
        stream << boost::chrono::duration_cast<boost::chrono::minutes>(duration);
    }

    return stream.str();
}

可能值得将流设为静态,但你明白了

于 2013-10-25T11:10:57.363 回答