使用gettimeofday来测量执行时间会导致奇怪的行为

时间:2013-06-10 18:47:39

标签: android c++ linux native

我正在使用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”。

我无法弄清楚为什么会发生这种情况。

感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

我的通灵调试能力告诉我,start_s和/或start_ms在你的计时器类中被意外地声明为静态,并且循环内的每个调用都是从循环外部更新共享的。