c - gettimeofday 计算日期变化的时间
问题描述
我在尝试测量经过时间时看到的典型示例如下所示:
#include <sys/time.h>
#include <stdio.h>
int main() {
struct timeval start, end;
gettimeofday(&start, NULL);
//Do some operation
gettimeofday(&end, NULL);
unsigned long long end_time = (end.tv_sec * 1000000 + end.tv_usec);
unsigned long long start_time = (start.tv_sec * 1000000 + start.tv_usec);
printf("Time taken : %ld micro seconds\n", end_time - start_time);
return 0;
}
这在中午的某个地方很棒,但是如果有人要在深夜运行一些测试,这将不起作用。我的方法是这样来解决它的:
#include <sys/time.h>
#include <stdio.h>
int main() {
struct timeval start, end;
gettimeofday(&start, NULL);
//Do some operation
gettimeofday(&end, NULL);
unsigned long long end_time = (end.tv_sec * 1000000 + end.tv_usec);
unsigned long long start_time = (start.tv_sec * 1000000 + start.tv_usec);
unsigned long long elapsed_time = 0;
if ( end_time < start_time )
//Made up some constant that defines 86,400,000,000 microseconds in a day
elapsed_time = end_time + (NUM_OF_USEC_IN_A_DAY - start_time);
else
elapsed_time = end_time - start_time;
printf("Time taken : %ld micro seconds\n", elapsed_time);
return 0;
}
有没有更好的方法来预测一天的变化gettimeofday
?
解决方案
尽管有名称,但gettimeofday
结果不会每天滚动。gettimeofday
秒计数,就像秒计数一样,从time
1970 年的第一天(特别是 1970 年 1 月 1 日 00:00:00 +00:00)从零开始,此后一直稳步增加。在 32 位系统上time_t
,它将在 2038 年的某个时间翻转;由于这个确切的原因,人们现在正在努力逐步淘汰 32 位的使用,time_t
我们预计将在 2038 年之前完成。
gettimeofday
结果也与时区无关,不受夏令时变化的影响。当计算机的时钟重置时,它们可以后退。如果你不想担心这个,你可以使用clock_gettime(CLOCK_MONOTONIC)
jnstead。
推荐阅读
- typescript - React-Native:什么会导致模块为空?
- python - httpx/httpcore 内脏中某处的异常
- .net - 登录在使用 .net 核心身份的身份验证中不起作用
- docker - docker swarm 与物理主机保持通信
- postgresql - 如何删除 postgres DB 中的内存缓存表
- ios - 当视图回到原位时需要帮助定位图像
- python - 选择数据框中的行,其中 ID 必须基于 PySpark 中的两个不同行具有两个条件
- android - 使用 Google Tink 加密间歇性损坏数据
- c# - 日志被ServiceCollection配置构建后可以修改和重建吗?
- python - TensorFlow 将所有图像分类为同一类