clock_gettime( CLOCK_REALTIME .... )和time()之间有什么区别?

27 浏览
0 Comments

clock_gettime( CLOCK_REALTIME .... )和time()之间有什么区别?

一个简单的问题:在理论上(仅考虑秒),time(...)clock_gettime( CLOCK_REALTIME, ... )产生的时间是相同的吗?

这是我的意思:

time_t epoch;
time( &epoch );

struct timespec spec;
clock_gettime( CLOCK_REALTIME, &spec );

这两个函数应该返回完全相同的结果吗(只考虑秒)?

我通过改变时间和时区进行“测试”,epochspec.tv_sec总是显示相同的结果,但是CLOCK_REATIME的文档让我有点困惑,我不能确定它们是否会始终相同。

现实世界的情况是:我有一段代码,使用了time函数。现在我想要以毫秒为单位的时间(可以通过spec.tv_nsec乘以1000000来获得)。所以我考虑移除time并直接使用clock_gettime,但我不确定在所有情况下是否保持不变。

这个问题与在Linux中测量时间 - time vs clock vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?有些关联,但那里的信息对我来说不够...我认为。

0
0 Comments

任何区别在于clock_gettime(CLOCK_REALTIME....)和time()之间吗?

clock_gettime()和time()函数都用于获取系统时间,但它们使用的源是不同的。clock_gettime()函数是glibc库中的一个函数,它通过调用gettimeofday()函数来获取系统时间,而gettimeofday()函数又是由一个名为clock_gettime()的系统调用来实现的。而time()函数则是一个系统调用,直接调用了get_seconds()函数来获取系统时间。这两个函数获取的时间都来自于同一个时钟源,即系统的实时时钟。

clock_gettime()函数可以传入不同的时钟ID作为参数,其中一个可能的值就是CLOCK_REALTIME。而time()函数没有参数,它会直接调用get_seconds()函数来获取系统时间。

但需要注意的是,上述对clock_gettime()函数的描述是错误的。clock_gettime()函数实际上是一个位于VDSO(Virtual Dynamic Shared Object)中的函数,它使用一个名为__vdso_clock_gettime()的函数来获取系统时间,而不是调用gettimeofday()函数。这个函数具有纳秒级的分辨率,而gettimeofday()函数只有微秒级的分辨率。

虽然clock_gettime()和time()函数使用了不同的实现方式,但它们获取的系统时间来自于同一个时钟源,即系统的实时时钟。

0