在`boost :: condition :: timed_wait`中消除`boost :: xtime`

时间:2019-02-14 02:17:49

标签: c++ boost

我们目前有许多以下形式的代码:

boost::xtime t;
boost::xtime_get (&t, POV_TIME_UTC);
t.sec += 3 ;
m_Event.timed_wait (lock, t);

甚至:

boost::xtime t;
boost::xtime_get (&t, POV_TIME_UTC);
t.nsec += 50000000 ;
m_Event.timed_wait (lock, t);

(是的,这无需检查t.nsec是否溢出。:shudder:

其中POV_TIME_UTC被定义为boot::TIME_UTCboost::TIME_UTC_,具体取决于增强版本。

将它们替换为安全吗?

m_Event.timed_wait (lock, boost::posix_time::seconds(3))

m_Event.timed_wait (lock, boost::posix_time::milliseconds(50))

分别?

还有,有人碰巧知道这需要最低的增强版本吗?我的研究表明提升1.35,但我可能会误会。

1 个答案:

答案 0 :(得分:1)

是的,Boost 1.35在Boost.Thread中增加了对相对超时的支持。是的,规范相对时间的规范方法是使用boost::posix_time::time_duration(这是posix_time::secondsposix_time::milliseconds的基类)。

如果您需要有关所需的Boost版本的文档,则changes in 1.35(从1.34开始又进行了更改)提到了对相对超时的支持。如果这对于您的目的来说太模糊了,请将1.34 documentation for condition1.35 documentation for condition_variable_any进行比较。 (有一个typedef,可让您在1.35中保留类型名称“ condition”。)1.34版仅记录了timed_wait()的绝对时间版本,而1.35版则包含了采用相对版本的模板次。既不是xtime也不是system_time的时间参数被认为是相对时间。

请注意,timed_wait()在Boost 1.50中已弃用-分别是相对超时和绝对超时,分别是wait_for()wait_until()从Boost 1.53开始,除非通过timed_wait()明确要求,否则将禁止#define的声明。因此,您提出的建议对1.35到1.52版本有效。 编辑:显然,不推荐使用的功能并未在计划的时间表中删除。但是,它们仍然不推荐使用,因此一旦您可以将1.50设置为最低版本,就应该谨慎地转换为较新的函数。