我正在尝试记录一段时间内经过的毫秒数。
我有一堂这样的课
// 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
的计数吗?为什么在这里我必须除以1000
? count()
是否总是以microseconds
返回,还是我做错了?
答案 0 :(得分:3)
count
返回您调用它的类型的滴答数。如果您是这样写的:
duration_cast<milliseconds>(end - m_start).count()
它将正确地为您提供毫秒数。但是,您并未将结果存储在std::chrono::milliseconds
中,而是将其存储在std::chrono::system_clock::duration
(m_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;