Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果未设置clock_settime,clock_gettime()是否工作?_C++_C_Linux_Time_Real Time Clock - Fatal编程技术网

C++ 如果未设置clock_settime,clock_gettime()是否工作?

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()的重复调用返回相同的时间值(秒)。我似乎记得我需要先用clock_settime()设置时间。clock_gettime()和time()是否使用相同的时间源

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,因为基本上,您观察到的是不可能的。