C++ Chest сокровищ — это сервисно-ориентированная фреймворк разработки и библиотека компонентов, основанная на модели Reactor, предназначенная для упрощения разработки на C++.
Примеры проектов:
rclcpp
.Смотри паттерн Reactor Node.js.
Основной поток обрабатывает события неблокирующего ввода-вывода в режиме Reactor, а также взаимодействует с пулеметом потоков для выполнения крупных вычислений и блокирующих операций.
Этот режим избегает проблем конкурентного блокирования в многопоточном режиме, обеспечивая стабильность и надежность программы.## 2. Включает основной фреймворк, удобство использования
Все несвязанные с бизнесом задачи обрабатываются с помощью встроенной основной системы. Вам не нужно беспокоиться о таких мелочах, как вывод логов, парсинг параметров, завершение программы и написание основной функции. Основная система берет на себя все эти задачи.
Вы просто наследуете класс tbox::main::Module
, заполняете бизнес-код и регистрируете его в фреймворке.
Вы можете взаимодействовать с работающим сервисом через telnet, заставляя его выводить внутренние данные или выполнять конкретные действия. Это значительно упрощает отладку.
## 4. Полностью логгированная система
1) Есть три приемника логов: stdout + filelog + syslog
std::cout
;syslog()
;<PREFIX>.YYMMDD_HHMMSS.<PID>.log
. При превышении размера файла 1МБ создается новый лог-файл. Из-за низкой эффективности записи файлов выходной канал использует фронт-энд и бэк-энд режимы.Один или несколько из трех приемников могут быть выбраны в параметрах запуска и изменены через терминал во время работы.
2) Разные уровни — разные цветаСодержание лога включает: уровень, время (точно до микросекунд), номер потока, имя модуля, имя функции, текст сообщения, имя файла, номер строки.
Это позволяет быстро и удобно находить проблему.
3) Гибкий фильтр вывода логов
Уровень лога может быть установлен отдельно для разных модулей во время выполнения программы, как показано ниже:
Параметры предоставляются в формате JSON, и любые форматы параметров выполнения могут быть переданы, включая: целые числа, десятичные числа, строки, массивы и комбинированные параметры, удовлетворяющие практически всем требованиям передачи параметров:
Вы можете использовать
-c your_cfg_file.json
для импорта конфигурационного файла в формате JSON при выполнении. В то же время вы также можете использовать -s 'xx.yy.zz=vvv'
для временного указания параметров.
Конфигурационный файл в формате JSON также поддерживает команду include
для включения других конфигурационных файлов при загрузке.
Дочерний поток делегирует основному потоку выполнение:
Основной поток делегирует дочернему потоку выполнение:
## 7. Грациозный процесс завершения
При получении сигналов: SIGINT, SIGTERM, SIGQUIT, SIGPWR, будет выполнен процесс завершения в порядке и освобождены ресурсы. Будет произведено чистое завершение.
При возникновении различных исключений в программе, таких как: сегментный сбой, утверждение, ошибка шины, незахваченное исключение и т.д., фреймворк захватывает и выводит полный стек вызовов в систему логирования. В случае аварийной остановки программы больше не придётся сталкиваться с пустым экраном. Эффект следующий:
Модуль отслеживания может записывать время и продолжительность каждого выполнения помеченной функции, а также экспортировать граф пламени для отображения:
Это отличный инструмент для анализа производительности и устранения проблем блокировки событий.## 10. Простой и визуализированный модуль машины состояний
Он отказывается от громоздкого наследования и дерева состояний традиционного режима и использует его напрямую в объединенном виде, что делает его простым и удобным. Также он может экспортировать диаграмму машины состояний для достижения того, что вы видите, то и получаете:
## 11. Визуализированный модуль поведенческого дерева
Он содержит событийно-ориентированное поведенческое дерево, которое может реализовать последовательные, ветвящиеся и циклические процессы действий в асинхронной среде, а также экспортировать визуальное дерево в реальном времени:
## 12. Богатый набор компонентов | Название | Описание |
|:--------:|:--------|
| base | Включает в себя логирование, общие инструменты и т. д. |
| util | Модуль удобства использования |
| event | Реализует три типа событий: ввод/вывод, таймер и сигнал, что является сердцем всего фреймворка |
| eventx | Включает в себя модули пула потоков ThreadPool, рабочего потока WorkThread, пула таймеров TimerPool и другие модули |
| log | Реализует эффективную и надежную запись логов в терминал, syslog и в виде файлов |
| trace | Реализует вывод трассировки в реальном времени в файлы |
| network | Реализует модуль связи через последовательный порт, терминал, UDP и TCP |
| terminal | Подобный командной строке терминал, который позволяет взаимодействовать с программами командами во время выполнения |
| main | Реализует полный процесс запуска программы и фреймворк, чтобы разработчики заботились только о бизнес-логике |
| run | Это ELF. Он загружает один или несколько файлов lib*.so, указанных параметром
-l xxx
, затем запускает модули внутри |
| mqtt | Клиент MQTT |
| coroutine| Функция корутина |
| http | Реализует модули HTTP сервера и клиента на основе сети |
| alarm | Реализует четыре часто используемых будильника: CRON будильник, одиночный будильник, будильник по неделе и будильник по рабочим дням |
| flow | Содержит многоуровневый автоматический режим и дерево поведения для решения проблемы потока действий в асинхронном режиме || crypto | Реализует часто используемые шифры AES и MD5 для шифрования и расшифровки |
| dbus | Реализует функцию интеграции D-Bus в события для обработки транзакций в неблокирующем режиме |# Окружение- Операционная система семейства Linux;
sudo apt update
sudo apt install build-essential
sudo apt install libgtest-dev libgmock-dev
sudo apt install libmosquitto-dev
sudo apt install libdbus-1-dev
git clone https://gitee.com/cpp-master/cpp-tbox.git
cd cpp-tbox
make 3rd-party modules RELEASE=1
После завершения, заголовочные файлы и библиотечные файлы находятся в директории .staging
.
Конечно, вы также можете указать путь генерации заголовочных файлов и библиотечных файлов, используя параметр STAGING_DIR
.
например:
make 3rd-party modules RELEASE=1 STAGING_DIR=$HOME/.tbox
После завершения, заголовочные файлы и библиотечные файлы находятся в пути $HOME/.tbox
.
cmake -B build
cmake --build build
cmake --install build
Настройте каталог установки, указав CMAKE_INSTALL_PREFIX
(по умолчанию установлено в /usr/local
):
cmake -B build -DCMAKE_INSTALL_PREFIX=$HOME/.tbox
Для получения подробной информации о том, как использовать cpp-tbox для разработки собственных программ, обратитесь к уроку:
cpp-tbox-tutorials
Пример использования find_package
:
cmake_minimum_required(VERSION 3.10)
project(tbox-find_package)
find_package(tbox COMPONENTS base util alarm event eventx)
add_executable(demo main.cpp)
target_link_libraries(demo PRIVATE tbox::tbox_base tbox::tbox_util tbox::tbox_alarm tbox::tbox_event tbox::tbox_eventx)
|:--------:|:--------------:|:---------:|:-------------:|:----------:| | libgtest-dev | все | нет | тестирование | sudo apt install libgtest-dev | | libgmock-dev | все | нет | тестирование | sudo apt install libgmock-dev | | libmosquitto-dev | mqtt | нет | MQTT | sudo apt install libmosquitto-dev | | libdbus-1-dev | dbus | нет | DBus | sudo apt install libdbus-1-dev |# Настройка
Откройте файл config.mk, вам не нужно блокировать модули, соответствующие app_y += xxx
, но обратите внимание на зависимости между модулями.
MIT, свободное использование.
Если этот проект облегчает вашу работу и вы заканчиваете рабочий день раньше, пожалуйста, дайте мне больше поддержки. Вы можете сделать следующее:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )