C++ Treasure Box — это сервисный фреймворк для разработки и библиотека компонентов, основанные на модели Reactor, направленные на упрощение разработки на C++.
Смотрите проекты:
См. шаблон Reactor в Node.js.
Основной поток обрабатывает события без блокировки в режиме Reactor, и работает в тандеме с ThreadPool для выполнения больших вычислений и блокирующих операций.
Этот режим избегает проблем конкурентного блокирования в многопоточном режиме, и программа становится стабильной и надежной.## 2. Содержит основной фреймворк, удобный для использования
Все несвязанное с бизнесом выполнение работы осуществляется с помощью встроенного основного фреймворка. Вам не нужно беспокоиться о таких мелочах, как вывод логов, парсинг параметров, завершение программы и написание основной функции. Основной фреймворк уже обрабатывает все за вас.
Вам нужно только наследовать класс tbox::main::Module
, заполнить бизнес-код и затем зарегистрироваться в фреймворке.
## 3. С терминалом, похожим на командную строку
Вы можете взаимодействовать с запущенным сервисом через telnet, заставляя его выводить внутренние данные или выполнять конкретные действия. Это значительно упрощает отладку.
1) Существует три источника логов: stdout + filelog + syslog
std::cout
;syslog()
;<PRIFIX>.YYMMDD_HHMMSS.<PID>.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. Визуализированный модуль трассировки
Модуль трассировки может записывать время и продолжительность каждого выполнения помеченной функции, и может экспортировать граф пламени для отображения:
Это отличный инструмент для анализа производительности и устранения проблем блокировки событий.
Она отказывается от громоздкого наследования и деривации традиционного режима состояний и использует его напрямую в комбинированном виде, что делает её простой и удобной. Она также может экспортировать диаграмму машины состояний для достижения того, что вы видите, то и получаете:
Оно содержит событийно-ориентированное поведение дерева, которое может реализовать последовательные, ветвящиеся и циклические процессы действий в асинхронной среде, и может экспортировать визуальное дерево в реальном времени:
|:----:|:----|
| 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 в событие для обработки транзакций в асинхронном режиме |# Окружение
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 )