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

OSCHINA-MIRROR/cpp-master-cpp-tbox

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_CN.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 22.04.2025 19:08 a04b1bf

cpp-tbox logo

License Language Platform

[English]

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

Практическое применение

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

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

Основные характеристики

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

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

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

4. Полная система логирования

1) Три канала вывода логов: stdout + filelog + syslog

  • stdout, вывод логов через std::cout на терминал;
  • syslog, вывод логов через syslog() в системный журнал;
  • filelog, запись логов в указанный каталог в файле с форматом: префикс.годмесяц_часминуты.процесс_id.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. Поддержка визуализации отслеживания выполнения Модуль trace может записывать время и длительность каждого выполнения отмеченных функций, что позволяет экспортировать и показать графики пламени:
График пламени trace
Это мощный инструмент для анализа производительности и выявления проблем блокировки событий.

10. Простая и удобная машина состояний

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

11. Визуализация поведенческих деревьев

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

12. Обширные компоненты для разработки| Название | Описание |

|:----:|:----| | base | Базовая библиотека | Включает в себя логирование, часто используемые инструменты и т. д. | | util | Утилитная библиотека | Библиотека, которая может быть полезна в бизнес-коде | | event | Библиотека событий | Реализует три типа событийных драйверов: IO, Timer, Signal, является сердцем всего фреймворка | | eventx | Расширенная библиотека событий | Включает модули: ThreadPool (пул потоков), WorkThread (рабочий поток), TimerPool (пул таймеров) | | log | Библиотека логирования | Реализует вывод логов в терминал, syslog и файл | | trace | Библиотека вывода трассировки | Реализует вывод трассировки в реальном времени в файл | | network | Библиотека сетевых соединений | Реализует модули для работы с последовательными портами, терминалами, UDP и TCP | | terminal | Библиотека терминалов | Аналог командного терминала, позволяет взаимодействовать с программой командами в режиме реального времени | | main | Основной фреймворк | Реализует полный процесс запуска программы и фреймворк, позволяющий разработчику сосредоточиться на бизнес-коде | | run | Экзекутор | Это исполняемый файл, который может загружать несколько динамических библиотек, указанных параметром -l xxx, и запускать модули внутри них | | mqtt | Библиотека MQTT-клиента | | | coroutine | Библиотека корутин | Как известно, асинхронные фреймворки затрудняют обработку последовательных бизнес-процессов, корутины компенсируют это || http | Библиотека HTTP | Реализует модули сервера и клиента HTTP на основе библиотеки network | | alarm | Библиотека будильников | Реализует четыре типа часто используемых будильников: CRON-будильник, одноразовый будильник, будильник по дням недели, будильник по рабочим дням | | flow | Библиотека потоков | Включает многоуровневые машины состояний и поведенческие деревья, решает проблемы потоков в асинхронном режиме | | crypto | Библиотека криптографических инструментов | Реализует часто используемые операции шифрования: AES, MD5 | | dbus | Библиотека адаптации DBUS | Реализует интеграцию DBUS в событийную систему для неблокирующей обработки транзакций |# Поддерживаемые среды

  • Операционная система 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

Метод 1: GNU Make

make 3rd-party modules RELEASE=1

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

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

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

Метод 2: 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
  • ВКонтакте: hevake_lee (укажите: cpp-tbox)
  • QQ-группа: 738084942 (cpp-tbox технический обмен)

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

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

  • Поддержите проект лайками: Star, Watch, Fork;
  • Рекомендуйте его своим коллегам и друзьям, а также в технических форумах;
  • Присоединитесь к QQ-группе, добавьте меня в ВКонтакте в группу;
  • Активно сообщайте о проблемах и предложениях;
  • Участвуйте в разработке проекта, делитесь своими идеями;
  • Сообщите нам о проектах, где используется этот проект;

Все предложения и помощь приветствуются.

Опубликовать ( 0 )

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

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