2015-09-23 6 views
1

Скажем, у меня есть входной сигнал, может быть случайным двойной:простой вход-выход с выдержкой времени

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

Я хочу, чтобы генерировать выходной сигнал, который просто применяет задержку в 0,5 сек (а 0.5sec мертвое время с точки зрения обработки сигнала.)

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

Я думал о хранении входа в векторе, наряду с отметкой времени в другом векторе, а затем искать выход = вход (0.5ски назад). Однако это кажется очень неэффективным.

Какая уместная структура данных для этого типа проблем? (Буфер, который позволяет мне вспомнить значение, которое было сохранено 0,5 секунды назад, и отбрасывает записанные значения, которые в прошлом больше, чем выбранная временная задержка)

+0

Как часто и как быстро происходит ввод? – wallyk

+0

Входы поступают непрерывно, каждый цикл while while (true) – user2926577

ответ

1

Структура, которую вы используете для хранения данных, должна иметь временную метку (либо истечение срока действия, либо момент, когда она была выставлена ​​в очередь) вместе с двойным значением.

Структура данных для хранения структур должна быть приоритетной (отсортировано по метке времени).

Потребительский поток должен спать в течение n миллисекунд, где n инициализируется до 500 мс.

Когда потребитель выталкивает первый элемент, он может проверять второй элемент и вычислять n (количество времени, которое нужно спать для следующей итерации). Иначе он снова может спать в течение 500 мс.

Сообщите мне, если я должен написать для этого код.

+0

Извинения, если я не описал проблему точно, вход и выход происходят непрерывно, каждый цикл в режиме ожидания. Я хочу, чтобы выход отставал на 0,5 сек. – user2926577

0

Что сразу приходит в голову - Producer-Consumer Pattern.

Попросите продюсера надавить на вход std::queue, и каждые 0,5 секунды (с помощью std::thread) имеют потребительский поп из него.

+0

Извините, если я не описал проблему точно, вход и выход происходят непрерывно, каждый цикл во время просмотра. Я хочу, чтобы выход отставал на 0,5 сек. – user2926577

Смежные вопросы