Gam*_*ads 6 milliseconds c++11 c++-chrono
我正在尝试记录一段时间内流逝的毫秒时间。
我有一堂这样的课
// class member declarations
class MyClass {
std::chrono::high_resolution_clock::time_point m_start;
std::chrono::system_clock::duration m_elapsed;
};
Run Code Online (Sandbox Code Playgroud)
我在课堂上有两种方法。一个是从 main 调用的func1CalledFromMainThread。
// Class methods
using namespace std::chrono;
void MyClass::func1CalledFromMainThread() {
m_start = std::chrono::high_resolution_clock::now();
}
Run Code Online (Sandbox Code Playgroud)
另一个是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;
}
Run Code Online (Sandbox Code Playgroud)
问题出在cout日志记录中。我发现我必须除以1000才能得到毫秒m_elapsed。不count返回这里的计数std::chrono::milliseconds吗?为什么我一定要经过1000这里?总是count()返回microseconds还是我做错了?
Rei*_*ica 10
count返回您调用它的类型的刻度数。如果你这样写:
duration_cast<milliseconds>(end - m_start).count()
Run Code Online (Sandbox Code Playgroud)
它会正确地给你毫秒数。但是,您没有将结果存储在 中std::chrono::milliseconds,而是将其存储在std::chrono::system_clock::duration( 的类型m_elapsed) 中。因此,返回的频率m_elapsed.count()的刻度数,在您的平台上可能是微秒。std::chrono::system_clock::duration
换句话说,您可以milliseconds通过将结果存储在milliseconds.