如果在我测量间隔时发生时间变化会发生什么,例如:
gettimeofday(&start, NULL);
system("./anotherProgram");
// during the execution of another program, time changes
gettimeofday(&end, NULL);
elapsed = (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0;
elapsed
会增加/减少一小时吗?
答案 0 :(得分:0)
在Unices上,gettimeofday
始终从the Epoch线性地测量时间。本地时间转换和DST与此无关,并且根本不会影响它。
但是,我现在实际上并不知道这在Windows上是怎么回事。过去,当DST切换发生时,Windows实际上改变了硬件时钟,我认为这会影响time
和gettimeofday
返回的内容,但我不能说我知道Windows全部那很好。我也不知道是否仍然如此。
如果有的话,你可能需要注意leap seconds,但它们开始时更为罕见(更不用说它们不会影响你的程序),如果我没有记错的话, ntpd
之类的东西会在一段时间内消失。然而,我对后者可能是错的。
如果您想要实际的单调增加时间,则应考虑使用clock_gettime(CLOCK_MONOTONIC, ...)
代替。
答案 1 :(得分:-2)
您想要测量执行期间的时间延迟。
当您在代码elapsed = (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0;
中写任何时间时,它会在执行system("./anotherProgram");
时显示相同的延迟。