1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cpp-master-cpp-tbox

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

cpp-tbox логотип

Лицензия Язык Платформа

[Chinese]

C++ Chest сокровищ — это сервисно-ориентированная фреймворк разработки и библиотека компонентов, основанная на модели Reactor, предназначенная для упрощения разработки на C++.

Области применения

  • Умная аппаратура, такая как: роботы (пылесосы, коммерческие сервисные роботы), IPC, дроны, автомобили и т.д.;
  • Компоненты краевых вычислений, такие как: шлюз умного дома, шлюз краевых вычислений IoT и т.д.;
  • Сервисы, такие как: SOCK5, промежуточные слои.

Примеры проектов:

  • cpp-socks5, чтобы узнать, как использовать TCP и как организовать проект;
  • protocol-adapter, чтобы узнать, как использовать TCP, UDP, MQTT, UART;
  • cpp-tbox-for-ros, чтобы узнать, как интегрировать в среду разработки ROS 2 и как использовать rclcpp.

Основные возможности## 1. Основана на модели Reactor

Смотри паттерн Reactor Node.js.
Основной поток обрабатывает события неблокирующего ввода-вывода в режиме Reactor, а также взаимодействует с пулеметом потоков для выполнения крупных вычислений и блокирующих операций.

Этот режим избегает проблем конкурентного блокирования в многопоточном режиме, обеспечивая стабильность и надежность программы.## 2. Включает основной фреймворк, удобство использования Все несвязанные с бизнесом задачи обрабатываются с помощью встроенной основной системы. Вам не нужно беспокоиться о таких мелочах, как вывод логов, парсинг параметров, завершение программы и написание основной функции. Основная система берет на себя все эти задачи.
Вы просто наследуете класс tbox::main::Module, заполняете бизнес-код и регистрируете его в фреймворке.

3. С терминалом типа Shell

Вы можете взаимодействовать с работающим сервисом через telnet, заставляя его выводить внутренние данные или выполнять конкретные действия. Это значительно упрощает отладку.
взаимодействие с терминалом## 4. Полностью логгированная система

1) Есть три приемника логов: stdout + filelog + syslog

  • stdout, вывод логов в терминал через std::cout;
  • syslog, вывод логов в syslog через syslog();
  • filelog, запись логов в указанную директорию в формате: <PREFIX>.YYMMDD_HHMMSS.<PID>.log. При превышении размера файла 1МБ создается новый лог-файл. Из-за низкой эффективности записи файлов выходной канал использует фронт-энд и бэк-энд режимы.

Один или несколько из трех приемников могут быть выбраны в параметрах запуска и изменены через терминал во время работы.

2) Разные уровни — разные цветаСодержание лога включает: уровень, время (точно до микросекунд), номер потока, имя модуля, имя функции, текст сообщения, имя файла, номер строки.
Это позволяет быстро и удобно находить проблему. показ лога

3) Гибкий фильтр вывода логов

Уровень лога может быть установлен отдельно для разных модулей во время выполнения программы, как показано ниже:
установка уровня лога

5. Гибкая система параметров

Параметры предоставляются в формате JSON, и любые форматы параметров выполнения могут быть переданы, включая: целые числа, десятичные числа, строки, массивы и комбинированные параметры, удовлетворяющие практически всем требованиям передачи параметров:
помощь с параметрами Вы можете использовать -c your_cfg_file.json для импорта конфигурационного файла в формате JSON при выполнении. В то же время вы также можете использовать -s 'xx.yy.zz=vvv' для временного указания параметров.
Конфигурационный файл в формате JSON также поддерживает команду include для включения других конфигурационных файлов при загрузке.

6. Распределение задач между потоками без блокировки

Дочерний поток делегирует основному потоку выполнение:
пример runInLoop Основной поток делегирует дочернему потоку выполнение:
пример ThreadPool## 7. Грациозный процесс завершения

При получении сигналов: SIGINT, SIGTERM, SIGQUIT, SIGPWR, будет выполнен процесс завершения в порядке и освобождены ресурсы. Будет произведено чистое завершение.
грациозное завершение

8. Комплексная система захвата исключений

При возникновении различных исключений в программе, таких как: сегментный сбой, утверждение, ошибка шины, незахваченное исключение и т.д., фреймворк захватывает и выводит полный стек вызовов в систему логирования. В случае аварийной остановки программы больше не придётся сталкиваться с пустым экраном. Эффект следующий:
вывод стека

9. Визуализированный модуль отслеживания

Модуль отслеживания может записывать время и продолжительность каждого выполнения помеченной функции, а также экспортировать граф пламени для отображения:
граф пламени
Это отличный инструмент для анализа производительности и устранения проблем блокировки событий.## 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;

  • C++11 или выше.

Скачивание и сборка

Подготовка

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

Использование GNU Make

make 3rd-party modules RELEASE=1

После завершения, заголовочные файлы и библиотечные файлы находятся в директории .staging.
Конечно, вы также можете указать путь генерации заголовочных файлов и библиотечных файлов, используя параметр STAGING_DIR.
например:

make 3rd-party modules RELEASE=1 STAGING_DIR=$HOME/.tbox

После завершения, заголовочные файлы и библиотечные файлы находятся в пути $HOME/.tbox.

Использование CMake

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, свободное использование.

Обратная связь

  • Issue: Любые вопросы приветствуются в разделе issue
  • WeChat: hevake_lee (Заметка: cpp-tbox)
  • QQ Группа: 738084942 (cpp-tbox технический обмен)

Поддержите нас

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

  • Поддержите проект лайками: звезда, отслеживание, форк;
  • Рекомендуйте проект коллегам и партнерам, а также вашим читателям на технических форумах;
  • Присоединяйтесь к вышеупомянутой QQ-группе, добавьте меня в WeChat, чтобы присоединиться к WeChat-группе;
  • Оставляйте положительные отзывы и предложения;
  • Участвуйте в развитии проекта и делитесь своими силами;
  • Дайте знать, в каких проектах используется этот проект;

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cpp-master-cpp-tbox.git
git@api.gitlife.ru:oschina-mirror/cpp-master-cpp-tbox.git
oschina-mirror
cpp-master-cpp-tbox
cpp-master-cpp-tbox
master