pthread_cond_timedwait函数需要timepec结构中的绝对时间。
我想用什么时间来获得绝对时间。我在网上看到了很多例子,我发现几乎所有时间都使用了功能。 (ftime,clock,gettimeofday,clock_gettime(所有可能的CLOCK _...)。
pthread_cond_timedwait使用绝对时间。这个等待时间会因改变机器的时间而受到影响吗?此外,如果我使用其中一个时间函数获得绝对时间,如果机器的时间在增加时间和添加增量时间之间发生变化,这将影响等待时间?是否有可能等待相对时间的事件?
要使用的功能是 clock_gettime()
使用条件变量的时钟id。这个时钟ID是 CLOCK_REALTIME
默认情况下可以更改(例如 CLOCK_MONOTONIC
)通过用a初始化条件变量 pthread_condattr_t
哪个 pthread_condattr_setclock()
被称为。
运用 time()
不是一个好主意,因为这不能保证是平等的 tv_sec
一个 clock_gettime(CLOCK_REALTIME)
。在某些情况下,这可能会导致程序忙碌等待 time()
达到已经达到的第二个 clock_gettime(CLOCK_REALTIME)
不久前。
要使用的功能是 clock_gettime()
使用条件变量的时钟id。这个时钟ID是 CLOCK_REALTIME
默认情况下可以更改(例如 CLOCK_MONOTONIC
)通过用a初始化条件变量 pthread_condattr_t
哪个 pthread_condattr_setclock()
被称为。
运用 time()
不是一个好主意,因为这不能保证是平等的 tv_sec
一个 clock_gettime(CLOCK_REALTIME)
。在某些情况下,这可能会导致程序忙碌等待 time()
达到已经达到的第二个 clock_gettime(CLOCK_REALTIME)
不久前。
我用过 clock_gettime
同 CLOCK_REALTIME
我。这应该令人满意,并允许您轻松创建一个绝对时间规格来超时。
实际上,在您进行等待设置时,机器时间可能会提前。一般情况下,如果你等待足够长的时间,这将无关紧要,你将不会像你希望的那样接近你所要求的唤醒时间。如果您在timedwait呼叫发出之前已经过了所请求的时间,那么它应该立即唤醒。
Solaris提供 pthread_cond_reltimedwait_np
,(np表示非便携式),但我不知道Linux上有任何此类功能。我建议等待绝对时间,如果需要的话,实施亲戚自己等待。
timespec
只是几秒钟的时间(time_t
)额外的纳秒。你可以使用相对时间 cond_relative_timed_wait
。
获取当前系统时间 time_t
表格电话 time(NULL);
来自“time.h”。更准确的是使用
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
这将返回纳秒。
也可以使用其他功能,但最终结果必须转换为秒数和纳秒数。