具有时间延迟的简单输入输出

时间:2015-09-23 00:20:04

标签: c++

我们说我有一个输入信号,可能是一个随机的双倍:

while(true){
  double t; // = current time, let's assume I know that
  double input = rand();
}

我想生成一个输出信号,它只需要0.5秒的时间延迟(信号处理术语中的死区时间为0.5秒)。

while(true){
  double input = rand();
  // in pseudocode double output(t) = input(t-0.5)
}

我正考虑将输入存储在矢量中,并在另一个矢量中存储时间戳,然后查找输出=输入(0.5秒前)。但是,这似乎效率很低。

这类问题的适当数据结构是什么? (一个缓冲区,让我回想起0.5秒前存储的值,并丢弃过去比所选时间延迟更多的记录值)

2 个答案:

答案 0 :(得分:1)

用于存储数据的结构应该有一个时间戳(有效期或入队时)以及双值。

存储结构的数据结构应该是优先级队列(按时间戳排序)。

消费者线程应该睡眠n毫秒,其中n被初始化为500毫秒。

当消费者弹出第一个项目时,它可以检查第二个项目并计算n(下一次迭代的睡眠时间)。否则它可以再睡500毫秒。

如果我应该为其编写代码,请告诉我。

答案 1 :(得分:0)

立即想到的是Producer-Consumer Pattern

让生产者将输入推送到std::queue,每0.5秒(使用std::thread)让消费者从中弹出。