4

C ++コードの時間を計ろうとしていますが、奇妙な結果が得られていました。このテストプログラムは、何が起こっているのかを特定するために作成しました。誰かが結果を説明できますか?これは、Ubuntu 11.04と、関連する場合はEC2中高CPUインスタンスで実行されました。

#include <iostream>
#include <time.h>
using namespace std;

int main()
{
    timespec startTime, currentTime;
    long elapsed;

    for (int i=0; i<5; i++) {
        clock_gettime(CLOCK_REALTIME, &startTime);
        sleep(1);
        clock_gettime(CLOCK_REALTIME, &currentTime);
        elapsed = currentTime.tv_nsec - startTime.tv_nsec;
        cout << elapsed << " nanoseconds elapsed" << endl;
        cout << "1000000000 expected" << endl;
    }
    return 0;
}

出力:

109044 nanoseconds elapsed
1000000000 expected
133713 nanoseconds elapsed
1000000000 expected
197287 nanoseconds elapsed
1000000000 expected
143396 nanoseconds elapsed
1000000000 expected
111871 nanoseconds elapsed
1000000000 expected
4

1 に答える 1

4

また、現在の時刻が次の秒にロールオーバーした可能性があることも考慮する必要があります。ナノ秒フィールドは、現在の秒でどれだけ時間内に進んだかを示すだけです。

    elapsed = (currentTime.tv_sec - startTime.tv_sec) * 1000000000
              + currentTime.tv_nsec - startTime.tv_nsec;
于 2012-07-06T01:27:14.340 に答える