Реализация планировщика (таймер) в C ++ - PullRequest
0 голосов
/ 04 июня 2018

У меня есть дамп сетевых пакетов, записанных с их временными метками (время захвата).Я хотел бы повторно воспроизвести пакеты, отправив их в том же темпе, в котором они прибыли.

Вопрос заключается в следующем: есть ли в C ++ специальная возможность для реализации планировщика?

Обычный ответ: отправьте первый пакет и дождитесь разницы между отметками времени:

auto now = std::chrono::high_resolution_clock::now();
auto diff = next_package_timestamp - current_package_timestamp;
std::this_thread::sleep_for(diff);

Однако мне не нравится это решение по нескольким причинам:

  1. Оно не учитывает короткое время ожидания.Что произойдет, если обработка события займет больше времени, чем разница между двумя временными метками ( diff )?Должен ли я использовать отдельный поток?Нужно ли полагаться на сигналы для вычислений?

  2. Это не учитывает длительного времени ожидания.Что произойдет, если время ожидания несколько слабых?Будет ли время оставаться синхронизированным с помощью NTP?Нужно ли полагаться на кварцевые часы?

Я бы предпочел тип функции

template <class Functor>
launch_at_specific_time(const time_t & time, Functor & functor);

, который вызывал бы функтор у определенной стенывремя .

Существует ли C ++ способ реализации Timer?Есть ли общая библиотека, которая взяла на себя задачу?

Заранее спасибо.

...