интервалы реального времени в C / C ++ - PullRequest
2 голосов
/ 24 июня 2011
  1. Можно сделать интервалы реального времени в не-Real-Time Linux приложении на C / C ++?

Я пишу симулятор АЦП.Это приложение, которое генерирует пакеты с определенной частотой.Важно, чтобы частота генерации пакетов как можно ближе соответствовала частоте дискретизации АЦП.Почему я не хочу использовать sleep() и usleep() для установки временных интервалов генерации пакета.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Можно ли создавать интервалы реального времени в не-Real-Time Linux приложении на C / C ++?

Нет ... если бы это было, это была бы система Linux в реальном времени.

Тем не менее, вы, вероятно, можете подойти очень близко, так что это зависит от ваших интервалов и допусков. Единственный серьезный вариант для точности, превышающей временные интервалы, - это пригвоздить отправляющий поток к ядру и позволить ему вращаться, не затрачивая при этом другую обработку на это ядро, но это очень расточительно для аппаратного обеспечения ....

Если вы можете позволить себе иметь достаточно длительные задержки для перепланирования отправляющего кода, тогда вы можете взглянуть на настройку сигналов тревоги и обработчиков сигналов, но это потенциально может значительно увеличить задержку, возможно, только в относительно редких случаях, когда ядра имеют все было использовано иначе. Чтобы оценить, насколько хорошо это работает, вы должны сделать реальные измерения при реалистичных системных нагрузках.

1 голос
/ 24 июня 2011

Генератор пакетов не должен находиться с отправителем пакета.
Если вы хотите, чтобы пакеты отправлялись вовремя, вы должны заранее создать пакеты и отправить их отправителю упаковщика.

Таким образом, вам нужен поток с рабочей очередью, и используйте спящий режим в этом потоке для своевременной отправки пакетов.(Вы можете посмотреть сон буста () )

...