std :: chrono :: milliseconds .count()以微秒为单位返回?

时间:2019-01-21 10:18:49

标签: c++11 chrono milliseconds

我正在尝试记录一段时间内经过的毫秒数。

我有一堂这样的课

// class member declarations
class MyClass {

    std::chrono::high_resolution_clock::time_point   m_start;
    std::chrono::system_clock::duration              m_elapsed;
};

我在课堂上有2个方法。从main调用的是func1CalledFromMainThread

// Class methods
using namespace std::chrono;
void MyClass::func1CalledFromMainThread() {

    m_start = std::chrono::high_resolution_clock::now();
}

另外一个func2CalledFromADifferentThread从另一个线程中调用

void MyClass::func2CalledFromADifferentThread() {

    // after some time following line of code runs from a different thread
    auto end = high_resolution_clock::now();

    m_elapsed = duration_cast<milliseconds>(end - m_start);
    std::cout << "Elapsed time in milliseconds is " << m_elapsed.count()/1000 << std::endl;
}

问题出在cout日志中。我看到我必须除以1000才能获得m_elapsed的毫秒数。 count不会在这里返回std::chrono::milliseconds的计数吗?为什么在这里我必须除以1000count()是否总是以microseconds返回,还是我做错了?

3 个答案:

答案 0 :(得分:3)

count返回您调用它的类型的滴答数。如果您是这样写的:

duration_cast<milliseconds>(end - m_start).count()

它将正确地为您提供毫秒数。但是,您并未将结果存储在std::chrono::milliseconds中,而是将其存储在std::chrono::system_clock::durationm_elapsed的类型)中。因此,m_elapsed.count()std::chrono::system_clock::duration的频率返回滴答数,这在您的平台上可能是微秒。

换句话说,通过将结果存储在milliseconds之外的其他内容中,您将立即撤消对milliseconds的转换。

答案 1 :(得分:1)

您正在使用system_clock::duration单位而不是milliseconds来存储持续时间。

您遇到的问题是std::chrono::system_clock::duration没有使用毫秒作为滴答计数。 执行此行m_elapsed = duration_cast<milliseconds>(end - m_start);时, 不管您是使用milli首先将时间转换为duration_cast,还是将滴答计数始终以system_clock::duration持续时间单位转换,恰好是microseconds

我只是将m_elapsed声明为std::chrono::duration<long, std::milli>,它应该可以正常工作。

答案 2 :(得分:0)

我遇到了类似的问题,并通过简单的更改解决了 来自:

std::chrono::system_clock::duration              m_elapsed;

收件人:

auto m_elapsed;