我想打印我的功能的运行时间。由于某种原因,我的计时器总是返回0.有谁可以告诉我为什么?
double RunningTime(clock_t time1, clock_t time2)
{
double t=time1 - time2;
double time = (t*1000)/CLOCKS_PER_SEC;
return time;
}
int main()
{
clock_t start_time = clock();
// some code.....
clock_t end_time = clock();
std::cout << "Time elapsed: " << double(RunningTime(end_time, start_time)) << " ms";
return 0;
}
我尝试使用gettimeofday
,但仍然返回0.
double get_time()
{
struct timeval t;
gettimeofday(&t, NULL);
double d = t.tv_sec + (double) t.tv_usec/100000;
return d;
}
int main()
{
double time_start = get_time();
//Some code......
double time_end = get_time();
std::cout << time_end - time_start;
return 0;
}
还尝试使用chrono
,它给了我各种构建错误:
错误:请求会员&#39;计算&#39; in&#39;(t2-t1)&#39;,其中 非类型&#39; int&#39;
int main() { auto t1 = std :: chrono :: high_resolution_clock :: now();
//Some code......
auto t2 = std::chrono::high_resolution_clock::now();
std::cout << "Time elapsed: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count() << " milliseconds\n";
return 0;
}
答案 0 :(得分:4)
计时器滴答约等于1 / CLOCKS_PER_SEC秒,这是毫秒级的分辨率。要查看真实(非零)数字,您应该调用一个非常长的函数或使用另一个具有更高时间分辨率的库:
chrono
(使用MSVS 2012)boost::chrono
(不幸的是,图书馆引用了很多其他人)gettimeofday
,它为您提供1微秒的时间分辨率答案 1 :(得分:0)
经过大量的反复试验,我选择了gettimeofday
。这是我的代码,我终于正常工作了。
double get_time()
{
struct timeval t;
gettimeofday(&t, NULL);
double d = t.tv_sec + (double) t.tv_usec/1000000;
return d;
}
int main()
{
double time_start = get_time();
//Some code.........
double time_end = get_time();
std::cout << time_end - time_start;
return 0;
}
答案 2 :(得分:0)
我最近使用的解决方案是使用C ++ 11的lambda功能来计算任意函数调用或一系列操作。
#include <ctime>
#include <iostream>
#include <functional>
void timeit(std::function<void()> func) {
std::clock_t start = std::clock();
func();
int ms = (std::clock() - start) / (double) (CLOCKS_PER_SEC / 1000);
std::cout << "Finished in " << ms << "ms" << std::endl;
}
int main() {
timeit([] {
for (int i = 0; i < 10; ++i) {
std::cout << "i = " << i << std::endl;
}
});
return 0;
}