【发布时间】:2013-03-22 23:47:59
【问题描述】:
我正在尝试使用chrono::steady_clock 来测量程序中一段代码之间经过的小数秒数。我在 LiveWorkSpace (http://liveworkspace.org/code/YT1I$9) 中有这段代码:
#include <chrono>
#include <iostream>
#include <vector>
int main()
{
auto start = std::chrono::steady_clock::now();
for (unsigned long long int i = 0; i < 10000; ++i) {
std::vector<int> v(i, 1);
}
auto end = std::chrono::steady_clock::now();
auto difference = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
std::cout << "seconds since start: " << ((double)difference / 1000000);
}
当我像这样在我的程序中实现相同的想法时:
auto start = std::chrono::steady_clock::now();
// block of code to time
auto end = std::chrono::stead_clock::now();
auto difference = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count()
std::cout << "seconds since start: " << ((double) difference / 1000000);
程序只会打印出0 和0.001 的值。我非常怀疑我的代码块的执行时间总是等于 0 或 1000 微秒,那么这个舍入的原因是什么,我该如何消除它以便获得正确的小数值?
这是一个 Windows 程序。
【问题讨论】:
-
改用
std::chrono::high_resolution_clock。 -
@KerrekSB:这是一个很好的建议,但
steady_clock::now()应该已经精确到纳秒,或者至少滴答声(100 纳秒间隔)。我怀疑这里有一个数学问题。 -
@RobertHarvey:哦,可能是演员表中放错位置的括号?
-
@KerrekSB 哪个括号放错了?在我看来是正确的。
-
@KerrekSB 对于它的价值,无论我使用
high_resolution_clock、steady_clock还是monotonic_clock,返回值都是相同的。它们总是0或0.001。
标签: c++ windows time c++11 chrono