我有一个以时间戳(抓取时间)记录的网络包转储。我想以他们到达时的速度发送它们来重新播放这些包。
问题是: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的方法?是否有一个通用的库,它已经完成了任务?
提前谢谢你。