uint64_t get_usec() {
struct timeval tv;
gettimeofday(&tv, NULL);
uint64_t tus = tv.tv_sec * 1000000LL + tv.tv_usec;
return tus;
}
获取到的微秒时间: tus = 2098365996;
这个时间应该是没有到微秒级别。不知道是什么原因?
你的代码看上去没有问题,它应该能返回微秒级别的时间。但是你看到的结果似乎并不是你所期待的。这可能是由于以下几个原因:
time_t
类型(这是 tv.tv_sec
的类型)可能被定义为 32 位整数,而不是 64 位整数。如果 tv.tv_sec
大于大约 2147 秒(这是 32 位整数可以表示的最大值除以 1000000),那么在执行 tv.tv_sec * 1000000LL
时就会发生溢出,结果将不可预测。为了避免这个问题,你可以尝试将 tv.tv_sec
显式地转换为 uint64_t
,然后再进行乘法运算:uint64_t tus = ((uint64_t)tv.tv_sec) * 1000000LL + tv.tv_usec;
ARM CPU的特性:一些 ARM CPU 默认不支持 64 位整数运算。因此,即使你的代码在其他平台(如 x86)上工作正常,它也可能在 ARM 平台上出现问题。你可能需要检查你的 ARM 编译器和设备的配置,看看是否支持 64 位整数运算。
系统调用gettimeofday的实现:gettimeofday
是系统调用,它的实现和具体的操作系统、硬件等因素有关。在一些环境中,gettimeofday
可能无法提供真正的微秒级别的精度。
你可以尝试使用其他方式来获取微秒级别的时间,比如使用 clock_gettime()
函数,如果你的系统支持的话。如果问题仍然存在,你可能需要深入调查你的环境和硬件配置。