Arhn - архитектура программирования

Обработчик сигналов таймера Linux C/C++ в пользовательском пространстве

Мне нужна функция (например, обработчик сигналов) в C/C++ linux, которая активируется каждые n миллисекунд. Как настроить сигналы и т. д. для регистрации событий таймера с миллисекундным разрешением.

Точность не суперкритична, но нужна в пределах сотни мс или около того.

Я новичок в Linux, и я действительно не знаю, с чего начать.

25.03.2011

Ответы:


1

setitimer(2) — хорошее начало, но вы действительно хотите использовать асинхронные сигналы? В противном случае у вас может быть основной цикл с select(2) или poll(2) и соответствующим тайм-аутом.

25.03.2011
  • Будьте осторожны с тем, что вы делаете внутри обработчика сигнала. Сигнал I доставляется так, как будто это прерывание, и может произойти в любое время. Вы должны быть очень осторожны с повторным входом. См. cs.utah.edu/dept/old. /texinfo/glibc-manual-0.02/library_21.html 25.03.2011
  • И список функций, безопасных для асинхронных сигналов, ближе к концу pubs.opengroup. org/onlinepubs/009695399/functions/ 25.03.2011

  • 2

    Гораздо более безопасной альтернативой setitimer (который POSIX 2008 помечает как OBSolete) было бы использование таймеров POSIX и запуск функции истечения срока действия таймера в потоке, а не в обработчике сигнала. Таким образом, вы не ограничены только использованием функций, безопасных для асинхронных сигналов. Они задокументированы здесь:

    http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_08_05

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

    25.03.2011
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..