我需要得到一个被调用几百万次(或更多)的特定C函数所花费的时间的总和。我正在尝试使用Cchrono
,我对它没有任何经验。在我看来,这段代码肯定会工作,但它无法编译:
#include <ctime>
#include <ratio>
#include <chrono>
int foo() {
static duration<microseconds> full_exec_time{};
auto start_time = high_resolution_clock::now():
// do a bunch of stuff
auto stop_time = high_resolution_clock::now();
auto exec_time = duration_cast<microseconds>(stop_time - start_time);
full_exec_time += exec_time; // problem right here
}
显然,问题出在full_exec_time
的递增上。我试图解释我收到的大量错误消息,chrono
似乎没有一个“+=”运算符,该运算符可以处理表达式中存在的两种durations
类型。这对我来说是一个惊喜,因为我会假设它们是相同的类型。无论如何,有人知道我在这里要做的事吗?这对我来说似乎很简单,它会被广泛地记录下来,但是我在任何地方都找不到任何关于它的东西。外面有很多(以及堆栈溢出时)关于将durations
添加到time points
,但没有太多关于将两个durations
添加在一起的内容。
1条答案
按热度按时间nbnkbykc1#
foo中的第一行使用
std::chrono::microseconds
代替duration<microseconds>
。std::chrono::duration
类模板接受两种类型<class Rep, class Period>
。std::chrono::microseconds
是duration</*signed integer type of at least 55 bits*/, std::micro>
的别名。修复了代码中错误的分号用法:https://godbolt.org/z/7fYhq8KGW