Есть ли у std :: condition_variable :: wait_until какое-либо преимущество перед std :: this_thread :: sleep_for? - PullRequest
6 голосов
/ 02 июля 2019

В сценарии ожидания времени:

наше программное обеспечение работает в фоновом режиме и синхронизирует данные с сервер каждые 20 - 30 минут.

Я хотел использовать

std::this_thread::sleep_for

Но мой начальник категорически против любой функции сна Он рекомендует

std::condition_variable::wait_until(lock, timeout-time, pred)

Интересно, есть ли какие-либо недостатки для sleep_for при таком сценарии?

1 Ответ

0 голосов
/ 02 июля 2019

Как уже отмечалось в комментариях, это зависит только от вашего варианта использования. Основное различие между ними состоит в том, что condition_variable может проснуться раньше, если вы его активируете. Вы также можете добавить предикат, который должен быть удовлетворен, чтобы фактически проснуться, но это только дополнение качества жизни. И, кстати, эквивалент sleep_for равен wait_for, а не wait_until. condition_variable также отлично подходит для связи или синхронизации между несколькими потоками.

Учитывая все, что вы сказали, я бы использовал condition_variable по следующим причинам:

  1. Переводить поток в спящий режим на более длительные периоды времени не очень хорошая идея, потому что ваше приложение может выйти в любое время (или, скорее, может быть запрошено выйти). В этом случае вы, вероятно, захотите, чтобы ваш поток завершился правильно, поэтому вы должны иметь возможность разбудить его в любое время.
  2. Вы хотите изменить конфиг на лету. Если ваш поток должен перезапуститься с новыми параметрами или если вам нужен этот поток для фактической загрузки файла конфигурации, вы также не хотите ждать окончания следующих 20 минут.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...