std::chrono::milliseconds .count() returns 以微秒为单位?
std::chrono::milliseconds .count() returns in microseconds?
我正在尝试记录一段时间内流逝的毫秒数。
我有一个class这样的
// class member declarations
class MyClass {
std::chrono::high_resolution_clock::time_point m_start;
std::chrono::system_clock::duration m_elapsed;
};
我在 class 中有 2 个方法。一个是从 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
return 不就是 std::chrono::milliseconds
的计数吗?为什么我必须在这里除以 1000
? count()
return 总是在 microseconds
还是我做错了?
count
returns 您调用它的类型的刻度数。如果你这样写:
duration_cast<milliseconds>(end - m_start).count()
它会正确地给你毫秒数。但是,您并未将结果存储在 std::chrono::milliseconds
中,而是将其存储在 std::chrono::system_clock::duration
(m_elapsed
的类型)中。因此,m_elapsed.count()
returns std::chrono::system_clock::duration
频率中的刻度数,在您的平台上可能是微秒。
换句话说,您通过将结果存储在 milliseconds
.
以外的其他内容中来立即撤消对 milliseconds
的强制转换。
您正在使用 system_clock::duration
单位而不是 milliseconds
单位存储持续时间。
你的问题是 std::chrono::system_clock::duration
没有使用毫秒作为滴答计数。
执行这一行时 m_elapsed = duration_cast<milliseconds>(end - m_start);
,
无论您是先使用 duration_cast
将时间转换为 milli
,滴答计数将始终以 system_clock::duration
持续时间单位进行转换,恰好是 microseconds
.
我只是将 m_elapsed
声明为 std::chrono::duration<long, std::milli>
,它应该会按预期工作。
- 查看 doc page 了解更多信息
我遇到了类似的问题,我通过简单的更改解决了它
来自:
std::chrono::system_clock::duration m_elapsed;
至:
auto m_elapsed;
我正在尝试记录一段时间内流逝的毫秒数。
我有一个class这样的
// class member declarations
class MyClass {
std::chrono::high_resolution_clock::time_point m_start;
std::chrono::system_clock::duration m_elapsed;
};
我在 class 中有 2 个方法。一个是从 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
return 不就是 std::chrono::milliseconds
的计数吗?为什么我必须在这里除以 1000
? count()
return 总是在 microseconds
还是我做错了?
count
returns 您调用它的类型的刻度数。如果你这样写:
duration_cast<milliseconds>(end - m_start).count()
它会正确地给你毫秒数。但是,您并未将结果存储在 std::chrono::milliseconds
中,而是将其存储在 std::chrono::system_clock::duration
(m_elapsed
的类型)中。因此,m_elapsed.count()
returns std::chrono::system_clock::duration
频率中的刻度数,在您的平台上可能是微秒。
换句话说,您通过将结果存储在 milliseconds
.
milliseconds
的强制转换。
您正在使用 system_clock::duration
单位而不是 milliseconds
单位存储持续时间。
你的问题是 std::chrono::system_clock::duration
没有使用毫秒作为滴答计数。
执行这一行时 m_elapsed = duration_cast<milliseconds>(end - m_start);
,
无论您是先使用 duration_cast
将时间转换为 milli
,滴答计数将始终以 system_clock::duration
持续时间单位进行转换,恰好是 microseconds
.
我只是将 m_elapsed
声明为 std::chrono::duration<long, std::milli>
,它应该会按预期工作。
- 查看 doc page 了解更多信息
我遇到了类似的问题,我通过简单的更改解决了它 来自:
std::chrono::system_clock::duration m_elapsed;
至:
auto m_elapsed;