我们目前有许多以下形式的代码:
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_UTC
或boost::TIME_UTC_
,具体取决于增强版本。
将它们替换为安全吗?
m_Event.timed_wait (lock, boost::posix_time::seconds(3))
和
m_Event.timed_wait (lock, boost::posix_time::milliseconds(50))
分别?
还有,有人碰巧知道这需要最低的增强版本吗?我的研究表明提升1.35,但我可能会误会。
答案 0 :(得分:1)
是的,Boost 1.35在Boost.Thread中增加了对相对超时的支持。是的,规范相对时间的规范方法是使用boost::posix_time::time_duration
(这是posix_time::seconds
和posix_time::milliseconds
的基类)。
如果您需要有关所需的Boost版本的文档,则changes in 1.35(从1.34开始又进行了更改)提到了对相对超时的支持。如果这对于您的目的来说太模糊了,请将1.34 documentation for condition
与1.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开始,除非通过 编辑:显然,不推荐使用的功能并未在计划的时间表中删除。但是,它们仍然不推荐使用,因此一旦您可以将1.50设置为最低版本,就应该谨慎地转换为较新的函数。 timed_wait()
明确要求,否则将禁止#define
的声明。因此,您提出的建议对1.35到1.52版本有效。