在`boost ::条件:: TIMED_WAIT中消除`boost :: Xtime`

Eliminate `boost::xtime` in `boost::condition::timed_wait`

本文关键字:boost Xtime TIMED 条件 WAIT      更新时间:2023-10-16

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

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_,具体取决于Boost版本。

用:

替换它们是安全的
m_Event.timed_wait (lock, boost::posix_time::seconds(3))

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

分别?

另外,有人碰巧知道这需要什么最低版本?我的研究表明Boost 1.35,但我可能会误会。

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

如果您需要有关所需的升级版本的文档,则更改为1.35(又称为1.34以来更改),请提及对相对超时的支持。如果为您的目的来说太模糊了,请将condition的1.34文档与condition_variable_any的1.35文档进行比较。(有一个typedef,可让您在1.35中保留类型名称" condition"。)版本1.34仅文档timed_wait()的绝对时间版本,而版本1.35具有用于使用相对时间的版本的模板。既不是xtime也不是system_time的时间参数是相对时间。

请注意,timed_wait()在Boost 1.50中被弃用 - 替换为wait_for()wait_until(),分别用于相对和绝对超时。

截至提升1.53,除非通过#define明确要求,否则timed_wait()的声明会被抑制。因此,您提出的内容对于版本1.35至1.52。 编辑:显然,未在记录的时间表上删除了弃用的功能。但是,它们仍然被弃用,因此一旦您可以将1.50建立为最低版本,将谨慎地转换为较新的功能。