Полное название: C++ Treasure Box, C++ сокровищница, это фреймворк для разработки и библиотека компонентов, основанные на модели Reactor, которая предназначена для упрощения разработки на C++.
Примеры проектов:
Использует модель Reactor, подобную Node.js.
Основной поток обрабатывает неблокирующие события IO в режиме Reactor, а также использует ThreadPool для выполнения сложных вычислений и блокирующих операций.
Эта модель избегает проблем конкурентного блокирования многопоточного режима, обеспечивая стабильность и надежность программы.## 2. Включает основной фреймворк, готовый к использованию
Использует встроенный основной фреймворк для обработки всех задач, не связанных с бизнесом. Вам не нужно беспокоиться о том, как выводить логи, как парсить параметры, как завершать программу или как писать основную функцию. Основной фреймворк уже все это сделал за вас.
Вам нужно только наследовать класс tbox::main::Module
, написать бизнес-код и зарегистрировать его в фреймворке.
## 3. Имеет командную строку, похожую на Shell
Вы можете взаимодействовать с запущенными службами через telnet, выводить внутренние данные или выполнять определенные действия. Это значительно упрощает отладку.
1) Три канала вывода логов: stdout + filelog + syslog
std::cout
на терминал;syslog()
в системный журнал;префикс.годмесяц_часминуты.процесс_id.log
. Если размер файла превышает 1МБ, создается новый файл логов. Из-за низкой эффективности записи в файл, этот канал вывода использует архитектуру с клиентом и сервером. Три канала могут быть использованы для запуска параметров, выбрав один или несколько одновременно, или изменить их в процессе выполнения через терминал.2) Окрашивание логов в зависимости от уровня, для удобства восприятия, содержание подробное
Содержимое логов включает: уровень, время (с точностью до микросекунд), номер потока, имя модуля, имя функции, текст, имя файла, номер строки.
Позволяет быстро локализовать проблему.
3) Гибкий фильтр вывода логов, который можно изменять во время выполнения
Во время выполнения можно отдельно для разных модулей задавать уровень логов, как показано ниже:
## 5. Гибкая система параметров, чтобы быть готовым ко всему
Параметры предоставляются в формате JSON, что позволяет передавать любые форматы параметров выполнения, включая: целые числа, десятичные числа, строки, массивы, составные параметры, удовлетворяющие практически все потребности передачи параметров:
При выполнении можно использовать -c your_cfg_file.json
для импорта конфигурационного файла в формате JSON. Также можно временно задавать параметры с помощью -s 'xx.yy.zz=vvv'
.
Конфигурационные файлы в формате JSON поддерживают команду include, что позволяет при загрузке включать другие конфигурационные файлы.
Подзадачи могут быть переданы основному потоку:
Основной поток может передать задачи подпотокам:
При получении сигналов: SIGINT, SIGTERM, SIGQUIT, SIGPWR, будет выполняться последовательный выход, освобождая ресурсы. Это обеспечивает чистый выход.
## 8. Полная система перехвата исключений
При возникновении различных исключений в программе, таких как: сегментация, утверждение, ошибка шины, неуловленное исключение, фрейм перехватывает и выводит полный стек вызовов в системе логов. При программном сбое больше не придется быть в неведении. Результаты следующие:
## 9. Поддержка визуализации отслеживания выполнения
Модуль trace может записывать время и длительность каждого выполнения отмеченных функций, что позволяет экспортировать и показать графики пламени:
Это мощный инструмент для анализа производительности и выявления проблем блокировки событий.
Отказавшись от сложной наследственной иерархии традиционных состояний, используется комбинированный подход, что делает его простым и удобным, а также позволяет экспортировать графики состояний, обеспечивая видимость результата:
Включает поведенческие деревья, основанные на событийном драйвере, которые позволяют реализовывать последовательные, ветвящиеся и циклические действия в асинхронной среде. Возможность в реальном времени экспортировать визуализированное дерево:
|:----:|:----|
| 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 в событийную систему для неблокирующей обработки транзакций |# Поддерживаемые среды
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 )