首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要在pthread_cond_timedwait中使用什么时间函数?

我需要在pthread_cond_timedwait中使用什么时间函数?
EN

Stack Overflow用户
提问于 2010-06-09 21:31:13
回答 3查看 9.5K关注 0票数 12

pthread_cond_timedwait函数需要time timespec结构中的绝对时间。

我应该使用什么时间函数来获得绝对时间。我在网上看到了很多例子,我发现几乎所有的时间函数都用到了。(ftime,CLOCK_,gettimeofday,clock_gettime (带有所有可能的时钟...))。

pthread_cond_timedwait使用绝对时间。更改机器的时间会影响等待时间吗?另外,如果我用一个时间函数得到绝对时间,如果机器的时间在get和增量时间的相加之间发生变化,这会影响等待时间吗?是否有可能改为等待具有相对时间的事件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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)已经达到的秒数。

票数 16
EN

Stack Overflow用户

发布于 2010-06-09 23:30:38

我自己也在CLOCK_REALTIME中使用过clock_gettime。这应该是令人满意的工作,并允许您轻松地创建一个绝对的timespec来超时。

实际上,当您进行等待设置时,机器时间可能会提前。一般来说,如果你等待的时间足够长,这很重要,那么你无论如何都不会像你希望的那样接近你所要求的唤醒时间。如果在执行timedwait调用时,您请求的时间已经过去,那么它应该会立即唤醒。

Solaris提供了pthread_cond_reltimedwait_np (np表示不可移植),但我不知道Linux上有这样的功能。我建议只等待绝对时间,如果需要的话,自己实现一个相对等待。

票数 2
EN

Stack Overflow用户

发布于 2010-06-09 21:55:04

timespec只是以秒为单位的时间(time_t)加上额外的纳秒。您可以在cond_relative_timed_wait中使用相对时间。

要以time_t格式获取当前系统时间,请从"time.h“调用time(NULL);。更准确的方法应该是使用

代码语言:javascript
复制
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);

这也将返回纳秒。

也可以使用其他函数,但最终结果必须转换为秒数和纳秒数。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3006259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档