Использование clock_gettime()
и nanosleep()
- путь. Какой-то другой механизм, вызывающий вашу функцию периодически, будет определенно медленнее. Вы можете даже рассмотреть циклы и счетчики циклов вместо использования nanosleep()
. Рассмотрим некоторые цифры:
При частоте 1 МГц ваша функция должна работать 1 микросекунду. На частоте 10 МГц ваша функция должна работать 100 наносекунд.
Некоторые экспериментальные данные о времени системных вызовов и переключениях контекста: https://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html [ 113]
Так что это выглядит как более 50 наносекунд для системного вызова и более микросекунды для переключения контекста. Некоторые другие вещи, вызывающие вашу функцию, помимо вашего собственного кода в том же процессе, вероятно, займут «слишком много времени».
У Herb Sutter есть большая обработка этой точной темы в Объектах 26, 27 и 28, "Минимизируя Зависимости Времени компиляции, Части 1, 2 и 3", в его превосходной книге Исключительный C++, ISBN: 0201615622.
сопроводительный текст http://ak.buy.com/db_assets/prod_images/489/30611489.jpg
По моему скромному мнению, это - одна из лучших доступных книг программирования на C++.
Я думаю, что необходимо быть очень осторожны и внимательны к этому. Обычно можно ограничить зависимости путем разделения кода и использования абстрактных интерфейсов (например: указатели функции или объектный эквивалент), но разделение обычно добавляет хрупкость. Например, можно назвать модуль через универсальный абстрактный интерфейс для сокращения зависимости от реализации фактического объекта, но необходимо обновить интерфейс в синхронизации с самим объектом, или код перестанет работать во времени выполнения.
Я сказал бы, что это важно для крупных проектов структуры в модулях с четко определенной иерархией, но в каждом модуле не идут за борт с разбивающимся кодом для ограничения зависимостей. Если Вы идете для улучшенного обслуживания, необходимо сбалансировать уменьшающие зависимости с сокращения хрупкости кода.