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::coutcount
返回调用它的类型的刻度数。如果您编写了以下命令:
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;