clock_gettime性能不一致

时间:2012-07-06 01:24:20

标签: c++ time

我正在尝试计算一些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

1 个答案:

答案 0 :(得分:4)

您还必须考虑当前时间可能已经延续到下一秒。纳秒字段仅告诉您在当前秒内您已经走了多远。

    elapsed = (currentTime.tv_sec - startTime.tv_sec) * 1000000000
              + currentTime.tv_nsec - startTime.tv_nsec;