У меня есть дамп сетевых пакетов, записанных с их временными метками (время захвата).Я хотел бы повторно воспроизвести пакеты, отправив их в том же темпе, в котором они прибыли.
Вопрос заключается в следующем: есть ли в C ++ специальная возможность для реализации планировщика?
Обычный ответ: отправьте первый пакет и дождитесь разницы между отметками времени:
auto now = std::chrono::high_resolution_clock::now();
auto diff = next_package_timestamp - current_package_timestamp;
std::this_thread::sleep_for(diff);
Однако мне не нравится это решение по нескольким причинам:
Оно не учитывает короткое время ожидания.Что произойдет, если обработка события займет больше времени, чем разница между двумя временными метками ( diff )?Должен ли я использовать отдельный поток?Нужно ли полагаться на сигналы для вычислений?
Это не учитывает длительного времени ожидания.Что произойдет, если время ожидания несколько слабых?Будет ли время оставаться синхронизированным с помощью NTP?Нужно ли полагаться на кварцевые часы?
Я бы предпочел тип функции
template <class Functor>
launch_at_specific_time(const time_t & time, Functor & functor);
, который вызывал бы функтор у определенной стенывремя .
Существует ли C ++ способ реализации Timer?Есть ли общая библиотека, которая взяла на себя задачу?
Заранее спасибо.