0

我正在使用 gettimeofday 来测量我用 C++ 本机代码为 android 应用程序编写的函数的执行时间。我创建了一个计时器类来帮助我完成此任务:

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”。

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

任何帮助表示赞赏。

谢谢。

4

1 回答 1

0

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

于 2013-06-10T19:45:46.473 回答