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

OSCHINA-MIRROR/cpp-master-cpp-tbox

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

cpp-tbox logo

License Language Platform

[中文]

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

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

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

Смотрите проекты:

Основные возможности

1. Основан на модели Reactor

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

Этот режим избегает проблем конкурентного блокирования в многопоточном режиме, и программа становится стабильной и надежной.## 2. Содержит основной фреймворк, удобный для использования

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

4. С полностью функциональной системой логирования

1) Существует три источника логов: stdout + filelog + syslog

  • stdout, Вывод логов в терминал через std::cout;
  • syslog, Вывод логов в syslog через syslog();
  • filelog, Запись логов в указанный каталог в формате: <PRIFIX>.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-сервера и HTTP-клиента на основе сетевого модуля | | alarm | Реализует 4 часто используемых будильника: 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 Group: 738084942 (cpp-tbox технический обмен)

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

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

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

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

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

Введение

Описание недоступно Развернуть Свернуть
C++ и 6 других языков
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