我正在写一个ADC模拟器。这是一个生成具有特定频率的包的应用程序。最重要的是,封装产生的频率尽可能接近ADC的采样率。为什么我不想使用sleep()
和usleep()
来设置包生成时间间隔。
感谢。
答案 0 :(得分:3)
可以在C / C ++中的非实时Linux应用程序中实现实时间隔吗?
不......如果是的话,它将是一个Real-Time Linux系统。
那就是说,你可能会非常接近,所以这取决于你的间隔和容差。对于子时间片精度,你唯一认真的选择是将发送线程固定到核心并让它旋转,同时保持其他处理能够脱离核心,但这非常浪费硬件....
如果您能够承受足够长的延迟,以便重新安排发送代码,那么您可以查看设置警报&信号处理程序,但这可能是大大更高的延迟,可能只在相对罕见的情况下核心已全部被利用。要评估其工作情况,您必须在实际系统负载下进行实际测量。
答案 1 :(得分:1)
数据包生成器不应与数据包发送方一起使用 如果您希望按时发送数据包,则应事先创建数据包,然后将其发送给打包程序发件人。
所以你需要一个带有工作队列的线程,并在该线程上使用sleep来按时发送数据包。 (你可以看一下boost's sleep())