我正在尝试计算一些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, ¤tTime);
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
答案 0 :(得分:4)
您还必须考虑当前时间可能已经延续到下一秒。纳秒字段仅告诉您在当前秒内您已经走了多远。
elapsed = (currentTime.tv_sec - startTime.tv_sec) * 1000000000
+ currentTime.tv_nsec - startTime.tv_nsec;