pthread_cond_timedwait函数需要time timespec结构中的绝对时间。
我应该使用什么时间函数来获得绝对时间。我在网上看到了很多例子,我发现几乎所有的时间函数都用到了。(ftime,CLOCK_,gettimeofday,clock_gettime (带有所有可能的时钟...))。
pthread_cond_timedwait使用绝对时间。更改机器的时间会影响等待时间吗?另外,如果我用一个时间函数得到绝对时间,如果机器的时间在get和增量时间的相加之间发生变化,这会影响等待时间吗?是否有可能改为等待具有相对时间的事件?
发布于 2010-11-22 00:19:32
要使用的函数是带有条件变量的时钟id的clock_gettime()。默认情况下,此时钟id为CLOCK_REALTIME,但可以通过使用已调用pthread_condattr_setclock()的pthread_condattr_t初始化条件变量来更改(如更改为CLOCK_MONOTONIC)。
使用time()不是一个好主意,因为这不能保证等于clock_gettime(CLOCK_REALTIME)的tv_sec。在某些情况下,这可能会导致您的程序繁忙-等待time()达到不久前clock_gettime(CLOCK_REALTIME)已经达到的秒数。
发布于 2010-06-09 23:30:38
我自己也在CLOCK_REALTIME中使用过clock_gettime。这应该是令人满意的工作,并允许您轻松地创建一个绝对的timespec来超时。
实际上,当您进行等待设置时,机器时间可能会提前。一般来说,如果你等待的时间足够长,这很重要,那么你无论如何都不会像你希望的那样接近你所要求的唤醒时间。如果在执行timedwait调用时,您请求的时间已经过去,那么它应该会立即唤醒。
Solaris提供了pthread_cond_reltimedwait_np (np表示不可移植),但我不知道Linux上有这样的功能。我建议只等待绝对时间,如果需要的话,自己实现一个相对等待。
发布于 2010-06-09 21:55:04
timespec只是以秒为单位的时间(time_t)加上额外的纳秒。您可以在cond_relative_timed_wait中使用相对时间。
要以time_t格式获取当前系统时间,请从"time.h“调用time(NULL);。更准确的方法应该是使用
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);这也将返回纳秒。
也可以使用其他函数,但最终结果必须转换为秒数和纳秒数。
https://stackoverflow.com/questions/3006259
复制相似问题