0

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;
}

次に、メイン コードで 2 つのタイマー オブジェクトを作成し、次のように測定を実行します。

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 ループが 5 回実行された場合、出力の例は「0.5 0.5 0.4 0.4 0.5 0.55」になります。

なぜこれが起こるのか分かりません。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

0

私の精神的なデバッグ能力は、start_sand/orstart_msがタイマー クラスで誤って static として宣言されており、ループ内の各呼び出しがループの外側から共有されている呼び出しを更新していることを教えてくれます。

于 2013-06-10T19:45:46.473 に答える