Устранить `boost :: xtime` в` boost :: condition :: timed_wait` - PullRequest
0 голосов
/ 14 февраля 2019

В настоящее время у нас есть много кода следующей формы:

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, но я могу ошибаться.

1 Ответ

0 голосов
/ 14 февраля 2019

Да, в Boost 1.35 добавлена ​​поддержка относительных таймаутов в Boost.Thread.Да, канонический способ указать относительное время - с помощью boost::posix_time::time_duration (который является базовым классом posix_time::seconds и posix_time::milliseconds).

Если вам нужна документация относительно требуемой версии Boost, изменения в 1,35 (то есть изменения с 1,34), упоминается поддержка относительных таймаутов.Если это слишком расплывчато для ваших целей, сравните документацию 1,34 для condition с документацией 1,35 для condition_variable_any.(Существует typedef, который позволяет вам сохранять имя типа "condition" в 1.35.) Версия 1.34 документирует только версии timed_wait() с абсолютным временем, в то время как версия 1.35 имеет шаблоны для версий, использующих относительное время.Предполагается, что параметр времени, который не является ни xtime, ни system_time, является относительным временем.

Имейте в виду, что * * * * * * * * * в Boost 1.50 устарело - заменой являются wait_for() и wait_until(), для относительного и абсолютного времени ожидания соответственно. Начиная с Boost 1.53, объявления timed_wait() подавляются, если специально не запрашивается через #define.То, что вы предлагаете, действительно для версий 1.35 - 1.52. Редактировать: Очевидно, что устаревшие функции не были удалены в задокументированном расписании.Тем не менее, они все еще не рекомендуются, поэтому, если вы установите минимальную версию 1.50, было бы целесообразно преобразовать ее в более новые функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...