Я работаю в многопоточной среде промежуточного программного обеспечения.Фреймворк - это в основном фреймворк для захвата и передачи.Так что это включает в себя ряд потоков.
Чтобы дать вам общее представление об архитектуре потоков: есть отдельные потоки для демультиплексора , receiveVideo , DecodeVideo , DisplayVideo и т. Д. Каждый поток выполняет свои функции, например:
демультиплексор извлекает аудио, видео пакеты
receivevideo получает заголовок + полезную нагрузку видео пакета и удаляет полезную нагрузку
DecodeVideo получает полезную нагрузку и декодирует пакет полезной нагрузки
DisplayVideo принимает декодированные пакеты и отображает декодированные пакеты на дисплее
Таким образом, каждый поток передает извлеченные данные вследующая тема.Потоки разделяют между собой буферы данных, и буферы синхронизируются с помощью мьютексов и семафоров.Точно так же существуют другие потоки для обработки ananlogvideo и analogaudio и т. Д.
Все потоки создаются во время инициализации , но они остаются заблокированнымисемафор и в зависимости от входных (аналоговых / цифровых) селективных семафоров сигнализируются так, что определенные потоки разблокируются и переходят к выполнению своей работы.На различных этапах каждый поток вызывает некоторый более низкий уровень (вызовы драйверов) для получения данных или записи данных и т. Д. Эти вызовы блокируются, и ошибки, возникающие в результате этих вызовов (драйвер возвращает поврежденные данные, остановка драйвера), должны обрабатываться, но в настоящее время не обрабатываются.
Я хотел реализовать механизм мониторинга потоков , где поток будет отслеживать эти рабочие потоки и в случае возникновения ошибки предпримет некоторые предупреждающие действия.Как я понимаю, некоторые такие механизмы обычно используются как сторожевые таймеры в приложениях с пользовательским интерфейсом или MMI.Я пытаюсь найти что-то подобное.
Я использую pthreads и No Boost или STL (это устаревший код, в значительной степени процедурный C ++)
Любые идеи о конкретных шаблонах фреймворка или дизайна или проектах с открытым исходным кодом, которые делают что-то подобное и могутпомочь с идеями для реализации моего требования?