我正在使用gettimeofday来测量我在Android应用程序的c ++本机代码中编写的函数的执行时间。我创建了一个计时器类来帮助我实现这个目标:
timer::timer(){Reset();}
timer::Reset(){
timeval t;
gettimeofday(&t, 0);
start_s = t.tv_sec;
start_ms = t.tv_usec * 0.001f;
}
timer::GetTime(){
timeval t;
gettimeofday(&t, 0);
return (t.tv_sec - start_s)*1000 + t.tv_usec * 0.001f - start_ms;
}
然后,在我的主代码中,我创建了两个计时器对象并按如下方式执行测量:
main(){
timer t1, t2;
stringstream str1;
t1.Reset();
for (some count){
t2.Reset();
some_function();
str1 << t2.GetTime() << " ";
}
str1 << t1.GetTime();
output str1;
}
但问题是,当我查看输出结果时,t1几乎与所有t2值相同。如果for循环运行五次,输出的示例可能是“0.5 0.5 0.4 0.4 0.5 0.55”。
我无法弄清楚为什么会发生这种情况。
感谢任何帮助。
感谢。
答案 0 :(得分:0)
我的通灵调试能力告诉我,start_s
和/或start_ms
在你的计时器类中被意外地声明为静态,并且循环内的每个调用都是从循环外部更新共享的。