C++11 std::chrono::millizes.count()以微秒为单位返回?

C++11 std::chrono::millizes.count()以微秒为单位返回?,c++11,chrono,milliseconds,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; }; 我在班上有两种方法。一个是从main调用的,它是从main线程调用的func1calledf

我试图记录在一段时间内经过的毫秒时间

我有一节这样的课

// class member declarations
class MyClass {

    std::chrono::high_resolution_clock::time_point   m_start;
    std::chrono::system_clock::duration              m_elapsed;
};
我在班上有两种方法。一个是从main调用的,它是从main线程调用的
func1calledfrom

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

    m_start = std::chrono::high_resolution_clock::now();
}
另一个是从不同的线程调用的
func2calledfromDifferentintThread

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;
}
void MyClass::func2calledfromDifferentintThread(){
//一段时间后,下面的代码行从另一个线程运行
自动结束=高分辨率时钟::现在();
m_经过=持续时间(结束-m_开始);

std::cout
count
返回调用它的类型的刻度数。如果您编写了以下命令:

duration_cast<milliseconds>(end - m_start).count()
duration\u cast(end-m\u start).count()
它将正确地给出毫秒数。但是,您不是将结果存储在
std::chrono::millides
中,而是将其存储在
std::chrono::system_clock::duration
(m_appeased
的类型)中。因此,
m_appeased.count()
返回
std::chrono::system\u clock::duration
频率中的刻度数,在您的平台上可能是微秒

换句话说,通过将结果存储在非
毫秒

的值中,可以立即撤消转换为
毫秒
,您使用的是
系统时钟::持续时间
单位,而不是
毫秒
。 您案例中的问题是,
std::chrono::system\u clock::duration
没有使用毫秒作为滴答数。 执行这一行时
m_expased=duration_cast(end-m_start);
, 无论您使用
duration\u cast
将时间首先转换为
milli
,滴答声的计数将始终转换为
system\u clock::duration
持续时间单位,该单位恰好是
微秒

我只需将
m_appeased
声明为
std::chrono::duration
,它应该按预期工作

  • 有关更多信息,请查看

    • 我遇到了类似的问题,我通过简单的改变解决了它 发件人:

      致:


      由于您是从不同的线程访问
      m_start
      ,因此您应该研究
      std::mutex
      。这里有一个视频
      教程:@Angew。是的,我在实际代码中使用了mutex,它比这个示例复杂得多。我刚刚创建了一个示例代码来讨论和理解这个问题,而不涉及到我想有很多细节是有用的。非常感谢你的回答
      std::chrono::system_clock::duration              m_elapsed;
      
      auto m_elapsed;