C++ 如果未设置clock_settime,clock_gettime()是否工作?
如果时钟未通过时钟设置时间()设置,时钟设置时间()是否工作?在这种情况下,对clock_gettime()的重复调用返回相同的时间值(秒)。我似乎记得我需要先用clock_settime()设置时间。clock_gettime()和time()是否使用相同的时间源C++ 如果未设置clock_settime,clock_gettime()是否工作?,c++,c,linux,time,real-time-clock,C++,C,Linux,Time,Real Time Clock,如果时钟未通过时钟设置时间()设置,时钟设置时间()是否工作?在这种情况下,对clock_gettime()的重复调用返回相同的时间值(秒)。我似乎记得我需要先用clock_settime()设置时间。clock_gettime()和time()是否使用相同的时间源 clock_gettime(clockid_t clk_id, struct timespec *tp) - All implementations support the system-wide real-time cloc
clock_gettime(clockid_t clk_id, struct timespec *tp) - All implementations support the system-wide real-time clock, which is identified by CLOCK_REALTIME. Its time represents seconds and nanoseconds SINCE THE EPOCH. When its time is changed, timers for a relative interval are unaffected, but timers for an absolute point in time are affected.
time() - returns the time as the number of seconds SINCE THE EPOCH, 1970-01-01 00:00:00 +0000 (UTC).
代码是C,平台是Ubuntu 18.04。C++在这个问题中被标记,因为据我所知,C++没有提供获得高精度时间的方法(尽管C++ 20确实如此),我将创建一个C++版本的代码。 <代码> CcLogyStTime/<代码>设置整个计算机的时间。只有系统管理工具(例如)和时间同步守护进程(例如)需要调用它。它需要超级用户权限;大多数程序无法成功调用它 如果某台计算机上从未调用过
clock\u settime
(或执行相同任务的旧API之一),则与当前时间的某些权威来源相比,clock\u gettime
返回的值可能是错误的。然而,无论时间是否准确,时钟都应该仍然在运行。我不知道在Linux或其他系统上有任何API可以停止系统时钟
但是,根据您使用的时钟ID,从对
clock\u gettime
的两个连续调用中获得相同的值可能是正常的(不是错误或问题)。例如,如果两次调用之间的间隔短于时钟分辨率,则可能会发生这种情况,如clock\u getres
所报告的,您是在检查其返回值是否存在错误并进行适当处理,还是仅仅假设它可以工作?文档说明了什么?您使用的代码是什么?另外,请阅读man 3 clock\u gettime
。您所说的“返回相同的值”是什么意思?它们是否在struct timespec*
参数中填充相同的值clock\u gettime(2)
对于错误只返回0或-1。传递一个空指针用于<代码>结构TimeSux*<代码>参数不是错误。@ SjsAM我认为大多数C++版本支持细粒度的时间。我在C++应用程序中使用这个函数。我知道C++ 20支持细粒度的时间。从迂腐的角度来看,这不是一个C++问题,我不会把它贴在CMP.L.C++: DThis是答案-时间必须首先设置在主机上。问题-时间和时钟是否使用同一个时钟(时间源)?@Xofo我想你误解了答案。我想说的是,无论时间是否已经设定,时钟都应该产生提前的时间(但要注意分辨率)。请不要在回答评论中提出新问题;我不明白你是如何从“无论时间是否已经设置好,clock\u gettime都应该产生提前的时间”到“必须先设置时间”的。@Xofo时间不需要通过clock\u settime()
设置clock\u gettime()
返回有效的tp
。与当地实际时间相比,这可能是错误的时间。例如,一个没有网络访问和实时时钟设置初始时钟时间的嵌入式Linux系统。@Xofo如果您观察到连续调用clock\u gettime
返回相同的值,然后调用clock\u settime
,然后,您观察到对clock_gettime
的连续调用返回了不同的值,然后要么您使用了与Unix/Linux/Posix非常不同的操作系统,要么您使用了与clock_REALTIME非常不同的clkid,因为基本上,您观察到的是不可能的。