【C++】开源:cpp-tbox百宝箱组件库

这篇具有很好参考价值的文章主要介绍了【C++】开源:cpp-tbox百宝箱组件库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍cpp-tbox百宝箱组件库。
无专精则不能成,无涉猎则不能通。。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

😏1. 项目介绍

项目Github地址:https://github.com/cpp-main/cpp-tbox

cpp-tbox 是一个跨平台、轻量级的 C++ 工具库,旨在提供丰富的常用功能和便捷的编程接口。它的设计目标是简单易用、高效可靠,并且具有较低的资源消耗。

以下是 cpp-tbox 的一些特点和功能:

1.跨平台支持:cpp-tbox 可以在多个主流操作系统上运行,包括 Windows、Linux、Mac等。它封装了操作系统相关的功能,提供了统一的接口,使得开发者可以在不同的平台下写出可移植的代码。

2.线程和并发支持:cpp-tbox 提供了线程管理、互斥锁、条件变量等基础的线程和并发功能。你可以使用 cpp-tbox 来创建和控制线程,进行线程同步和互斥操作,实现多线程并发编程。

3.内存管理:cpp-tbox 提供了内存管理的工具和接口,帮助你更方便地进行内存分配和释放。它封装了常用的内存操作,如动态内存分配、内存对齐、内存拷贝等,提供了安全和高效的内存管理功能。

4.常用数据结构和算法:cpp-tbox 实现了许多常用的数据结构和算法,如动态数组、链表、哈希表、堆等。它们被设计为高效和易用的,可以满足各种场景下的需求。

5.文件和IO操作:cpp-tbox 提供了便捷的文件和IO操作接口,使得文件处理和IO操作变得更简单。你可以使用 cpp-tbox 来读写文件、创建目录、遍历文件系统等。

6.字符串操作:cpp-tbox 封装了常见的字符串处理操作,如拆分、连接、格式化等。它还提供了正则表达式的支持,使得字符串匹配和替换更方便。

7.时间和日期处理:cpp-tbox 提供了时间和日期相关的功能,如获取当前时间、计算时间差、日期格式化等。它还支持时区转换,以及常见的时间和日期操作。

😊2. 安装运行

编译运行:

cd cpp-tbox
# make编译
make 3rd-party modules RELEASE=1 STAGING_DIR=$HOME/.tbox
# cmake编译
cmake -B build -DCMAKE_INSTALL_PREFIX=$HOME/.tbox
# 完成之后,头文件与库文件都在 $HOME/.tbox 路径下

另外,这个开源项目也配套了使用教程:https://gitee.com/cpp-master/cpp-tbox-tutorials/blob/master/README.md

我已经跟着走了一遍,感觉还是不错的,可以学到一些东西。

😆3. 进阶使用

一个基本的基于reactor事件的进程:

#include <tbox/main/main.h>

namespace app1 {

class App : public tbox::main::Module
{
  public:
    App(tbox::main::Context &ctx);
    ~App();

  protected:
    virtual bool onInit(const tbox::Json &cfg) override;
    virtual bool onStart() override;
    virtual void onStop() override;
    virtual void onCleanup() override;
};

}

Makefile示例:

TARGET:=demo

OBJECTS:=app_main.o

CXXFLAGS:=-I$(HOME)/.tbox/include -DLOG_MODULE_ID='"demo"'
LDFLAGS:=-L$(HOME)/.tbox/lib -rdynamic
LIBS:=\
	-ltbox_main \
	-ltbox_terminal \
	-ltbox_network \
	-ltbox_eventx \
	-ltbox_event \
	-ltbox_log \
	-ltbox_util \
	-ltbox_base \
	-lpthread -ldl

$(TARGET): $(OBJECTS)
	g++ -o $@ $^ $(LDFLAGS) $(LIBS)

clean:
	rm *.o

一个打印日志的示例:

#include <tbox/main/module.h>
#include <tbox/base/log.h>

#include <iostream>

class MyModule : public tbox::main::Module {
  public:
    explicit MyModule(tbox::main::Context &ctx) : tbox::main::Module("my", ctx) { }
    virtual ~MyModule() { }

  public:
    virtual bool onInit(const tbox::Json &js) override { 
      // 等级、时间点、线程号、模块名、函数名、内容、文件名:行号
      std::cout << "======= Start print log!" << std::endl;
      LogFatal("this is fatal log");
      LogErr("this is error log");
      LogWarn("this is warn log");
      LogInfo("this is info log");
      LogDbg("this is debug log");
      return true; 
    }
    virtual bool onStart() override { LogTag(); return true; }
    virtual void onStop() override { LogTag(); }
    virtual void onCleanup() override { LogTag(); }
};

namespace tbox {
namespace main {
void RegisterApps(Module &apps, Context &ctx) {
  apps.add(new MyModule(ctx));
  std::cout << "======= Start print log2!" << std::endl;
}
}
}

一个定时器事件:

#include <tbox/main/module.h>
#include <tbox/base/log.h>
#include <tbox/event/timer_event.h> /// 导入TimerEvent类

class MyModule : public tbox::main::Module {
  public:
    explicit MyModule(tbox::main::Context &ctx)
        : tbox::main::Module("my", ctx)
        , tick_timer_(ctx.loop()->newTimerEvent())    /// 实例化定时器对象
    { }

    virtual ~MyModule() { delete tick_timer_; } /// 释放定时器对象

  public:
    virtual bool onInit(const tbox::Json &js) override {
        /// 初始化,设置定时间隔为1s,持续触发
        tick_timer_->initialize(std::chrono::seconds(1), tbox::event::Event::Mode::kPersist); // kPersist kOneshot
        /// 设置定时器触发时的回调
        tick_timer_->setCallback([this] { onTick(); });
        return true;
    }
    /// 启动
    virtual bool onStart() {
        tick_timer_->enable();
        return true;
    }
    /// 停止
    virtual void onStop() {
        tick_timer_->disable();
    }

  private:
    void onTick() {
        ++count_;
        LogDbg("count:%d", count_);
    }

  private:
    tbox::event::TimerEvent *tick_timer_;
    int count_ = 0;
};

namespace tbox {
namespace main {
void RegisterApps(Module &apps, Context &ctx) {
  apps.add(new MyModule(ctx));
}
}
}

一个信号事件的处理:

#include <unistd.h>
#include <tbox/main/module.h>
#include <tbox/base/log.h>
#include <tbox/event/timer_event.h>
#include <tbox/event/signal_event.h>    //! 导入SignalEvent

using namespace std::placeholders;

class MyModule : public tbox::main::Module {
  public:
    explicit MyModule(tbox::main::Context &ctx)
        : tbox::main::Module("my", ctx)
        , tick_timer_(ctx.loop()->newTimerEvent())
        , signal_event_(ctx.loop()->newSignalEvent())   //! 实例化SignalEvent对象
    { }

    virtual ~MyModule() {
        delete signal_event_;   //! 释放SignalEvent对象
        delete tick_timer_;
    }

  public:
    virtual bool onInit(const tbox::Json &js) override {
        tick_timer_->initialize(std::chrono::seconds(1), tbox::event::Event::Mode::kPersist);
        tick_timer_->setCallback([this] { onTick(); });

        //! 初始化SignalEvent,令其同时监听SIGUSR1,SIGUSR2信号,且是持续有效
        signal_event_->initialize({SIGUSR1, SIGUSR2}, tbox::event::Event::Mode::kPersist);
        //! 设置回调函数,均指向onSignalEvent()
        signal_event_->setCallback(std::bind(&MyModule::onSignalEvent, this, _1));
        return true;
    }
    virtual bool onStart() {
        tick_timer_->enable();
        signal_event_->enable(); //! 使能SignalEvent
        return true;
    }
    virtual void onStop() {
        signal_event_->disable();
        tick_timer_->disable();  //! 关闭SignalEvent
    }

  private:
    void onTick() {
        ++count_;
        LogDbg("count:%d", count_);
    }

    //! 信号事件时的处理
    void onSignalEvent(int signo) {
        LogInfo("got signal: %d", signo);
        if (signo == SIGUSR1)
            tick_timer_->disable(); //! 关闭定时器
        else if (signo == SIGUSR2)
            tick_timer_->enable();  //! 打开定时器
    }

  private:
    tbox::event::TimerEvent  *tick_timer_;
    tbox::event::SignalEvent *signal_event_;    //!< 定义SignalEvent对象
    int count_ = 0;
};

namespace tbox {
namespace main {
void RegisterApps(Module &apps, Context &ctx) {
  apps.add(new MyModule(ctx));
}
}
}

一个http服务示例:

#include <tbox/main/module.h>
#include <tbox/base/log.h>
#include <tbox/http/server/server.h> //! 导入Http服务

class MyModule : public tbox::main::Module {
  public:
    explicit MyModule(tbox::main::Context &ctx)
        : tbox::main::Module("my_http", ctx)
        , http_server_(ctx.loop())  //! 实例化Http服务对象
    { }

  public:
    virtual bool onInit(const tbox::Json &js) override {
        //! 初始化Http服务,绑定 0.0.0.0:12345 地址,backlog为2
        if (!http_server_.initialize(tbox::network::SockAddr::FromString("0.0.0.0:12345"), 2))
            return false;

        //! 指定Http服务的请求的处理方法
        http_server_.use(
            [] (tbox::http::server::ContextSptr http_ctx,
                const tbox::http::server::NextFunc &next_func) {
                //! 不管请求的是什么,直接指定回复的body内容
                http_ctx->res().body = R"(<p>Welcome to CppTbox.</br>This is http example.</p>)";
            }
        );

        return true;
    }
    virtual bool onStart() override {
        http_server_.start();   //! 启动Http服务
        return true;
    }
    virtual void onStop() override {
        http_server_.stop();    //! 停止Http服务
    }

  private:
    tbox::http::server::Server http_server_;    //! 定义Http服务对象
};

namespace tbox {
namespace main {
void RegisterApps(Module &apps, Context &ctx) {
  apps.add(new MyModule(ctx));
}
}
}

【C++】开源:cpp-tbox百宝箱组件库,# c++开源项目学习,c++,开源

以上。文章来源地址https://www.toymoban.com/news/detail-584406.html

到了这里,关于【C++】开源:cpp-tbox百宝箱组件库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python百宝箱】声音的数字化探索:Python引领音频奇妙世界

    在数字化时代,声音技术的迅速发展不仅革新了音乐产业,也在语音识别、虚拟现实、智能系统等领域引发了革命性变革。Python作为强大的编程语言,引领着音频处理与分析的新潮流。本文将探索Python在音频领域的广泛应用,从声音数据的处理到创意性应用。 1. librosa 介绍与

    2024年02月04日
    浏览(42)
  • 【Python百宝箱】模拟未见之境:精准工具畅游分子动力学风景

    前言 在当今科学研究中,分子动力学模拟成为解析原子和分子行为的关键工具之一。本文将深入探讨几种领先的分子动力学模拟工具,包括MDTraj、ASE(原子模拟环境)、OpenMM和CHARMM。这些工具不仅提供了高效的模拟引擎,而且支持丰富的分析和可视化工具,满足了不同研究领

    2024年01月16日
    浏览(33)
  • 【Python百宝箱】数据的第三维:Python打开的3D时空之门

    在计算机科学和工程领域,3D图形和可视化是强大的工具,可以帮助我们更好地理解和呈现复杂的数据。本文将深入探讨Python中几个重要的3D图形和可视化库,包括MayaVi、VTK、Plotly、PyOpenGL、Three.js、Holoviews和PyVista。通过学习这些库,读者将能够在科学、工程和数据分析中更灵

    2024年02月01日
    浏览(33)
  • 【Python百宝箱】边缘计算Python库大揭秘:构建高效、智能的IoT系统

    随着边缘计算在物联网和分布式系统中的广泛应用,寻找适用于边缘设备的Python库变得愈发重要。本文将探索多个Python库,涵盖了边缘计算的各个方面,从设备管理、分布式计算到通信模块,为开发人员提供了在边缘环境中构建智能、高效分布式应用的工具和技术。 【数字图

    2024年02月20日
    浏览(32)
  • 【Python百宝箱】机器人世界的 Python 征程:控制、感知、创新一网打尽

    在当今快速发展的科技领域,机器人技术正日益成为人工智能的焦点。本文旨在为开发者和研究者提供一份全面的指南,展示了如何使用Python语言从机器人的基础控制到高级认知功能的全过程开发。通过深入剖析涵盖硬件控制、图像处理、机器学习、数据库连接、自然语言处

    2024年02月01日
    浏览(39)
  • 【Python百宝箱】Python黑客实践手册:综合运用工具保障您的数字世界安全

    在当今数字化时代,网络安全变得至关重要。随着技术的迅猛发展,网络威胁也在不断演进。本文将带领您深入探讨一系列流行的网络安全工具,重点关注它们如何通过Python脚本提供强大的漏洞扫描和渗透测试功能。从 nmap 到 Metasploit ,再到 Wireshark 和 Burp Suite ,我们将揭示

    2024年02月03日
    浏览(32)
  • 【Python百宝箱】Python引领虚拟奇境:探索VR和AR开发的利器库

    前言 虚拟现实(VR)和增强现实(AR)技术正在迅速崛起,为我们的数字体验提供了全新的可能性。在这个充满创新的领域中,选择合适的工具和库是成功开发虚拟现实和增强现实应用的关键一步。本文将深入探讨几个强大的Python库,从构建虚拟环境到处理物理仿真,再到安

    2024年02月03日
    浏览(34)
  • 【Python百宝箱】Python测试工具大揭秘:从单元测试到Web自动化

    在现代软件开发中,测试是确保代码质量和稳定性的关键步骤。Python作为一门广泛应用的编程语言,拥有丰富的测试工具和库,从单元测试到Web自动化,覆盖了多个测试层面。本文将介绍一系列Python测试工具,帮助开发者选择适合项目需求的工具,提高代码的可靠性和可维护

    2024年02月03日
    浏览(38)
  • 猿创征文|工具百宝箱-数据库连接工具-接口调试与测试工具-抓包工具

    工具没有绝对意义上的好坏之分,只有需求适合与否,这些需求可能包括:功能、价格、安全、服务、技术等诸多方面。 技术在更新迭代,开发者工具也在更新迭代。一个高效趁手的工具在工作上锦上添花。给大家分享一下我平时用的一部分工具。 官方活动入口:「猿创征

    2023年04月27日
    浏览(30)
  • 【C++】开源:abseil-cpp基础组件库配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍abseil-cpp基础组件库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/abseil/abseil-cpp 官网:

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包