代码之家  ›  专栏  ›  技术社区  ›  TheWaterProgrammer

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

  •  3
  • TheWaterProgrammer  · 技术社区  · 5 年前

    我试图记录经过一段时间的毫秒数。

    我有一个这样的班

    // class member declarations
    class MyClass {
    
        std::chrono::high_resolution_clock::time_point   m_start;
        std::chrono::system_clock::duration              m_elapsed;
    };
    

    我在课堂上有两种方法。一个是从主系统调用的 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 在这里?我为什么要除以 一千 在这里?做 count() 始终返回 microseconds 还是我做错了?

    2 回复  |  直到 5 年前
        1
  •  3
  •   Angew is no longer proud of SO    5 年前

    count 返回调用它的类型的刻度数。如果你写了这个:

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

    它会正确地给出毫秒数。但是,您没有将结果存储在 std::chrono::milliseconds ,您将其存储在 std::chrono::system_clock::duration (类型) m_elapsed )因此, m_elapsed.count() 返回计时周期数 标准::时间::系统时钟::持续时间 的频率,在您的平台上可能是微秒。

    换言之,您将立即取消演员表 milliseconds 将结果存储在 毫秒 .

        2
  •  1
  •   Davide Spataro Amey    5 年前

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

    你的问题是 std::chrono::system_clock::duration 不使用毫秒作为计时周期计数。 执行此行时 m_elapsed = duration_cast<milliseconds>(end - m_start); , 不管你是先把时间转换成 milli 使用A duration_cast 计时周期计数将始终转换为 系统时钟:持续时间 持续时间单位 microseconds .

    我只需声明 m_elapsed 作为 std::chrono::duration<long, std::milli> 它应该像预期的那样工作。