barkeep:异步显示动画、计数器和进度条

barkeep:异步显示动画、计数器和进度条

barkeep Small C++ header to display async animations, counters, progress bars, and status messages barkeep 项目地址: https://gitcode.com/gh_mirrors/bar/barkeep

项目介绍

barkeep 是一个极小的、仅包含单个 C++ 头文件的库,用于在终端异步显示动画、计数器和进度条。它通过包含 barkeep.h 文件即可被项目使用。barkeep 致力于实现非侵入式设计,同时提供了 Python 绑定。

项目技术分析

barkeep 的技术架构非常简洁,它通过单个头文件提供了丰富的功能。这个库的设计理念是尽可能减少对现有项目的侵入性,同时提供易于使用的接口。以下是该项目的一些技术亮点:

  • 单一头文件:barkeep 采用单头文件设计,这意味着你只需要将 barkeep.h 包含到你的项目中,即可使用所有功能。
  • 异步显示:它支持异步显示动画、计数器和进度条,而不会阻塞主线程。
  • 非侵入式设计:barkeep 的设计尽量减少对原有代码的修改,使其易于集成到现有项目中。
  • Python 绑定:除了 C++ 之外,barkeep 还提供了 Python 绑定,使得 Python 项目也可以使用这些功能。

项目及技术应用场景

barkeep 的应用场景非常广泛,以下是一些典型的使用案例:

  1. 等待动画:在执行长时间操作时,显示一个等待动画,提高用户体验。

    using namespace std::chrono_literals;
    namespace bk = barkeep;
    
    auto anim = bk::Animation({.message = "Working"});
    /* do work */ std::this_thread::sleep_for(10s);
    anim->done();
    
  2. 下载进度条:在下载文件或执行其他需要监视进度的操作时,显示进度条。

    auto anim = bk::Animation({.message = "Downloading...", .style = bk::Earth});
    
  3. 读取行数计数器:在读取文件或处理数据时,显示已读取的行数。

    int work{0};
    auto c = bk::Counter(&work, {
      .message = "Reading lines",
      .speed = 1.,
      .speed_unit = "line/s"
    });
    for (int i = 0; i < 505; i++) {
      std::this_thread::sleep_for(13ms); // read & process line
      work++;
    }
    c->done();
    
  4. 进度条监控变量:在处理需要监控进度的变量时,使用进度条。

    int work{0};
    auto bar = bk::ProgressBar(&work, {
      .total = 505,
      .message = "Reading lines",
      .speed = 1.,
      .speed_unit = "line/s",
    });
    for (int i = 0; i < 505; i++) {
      std::this_thread::sleep_for(13ms); // read & process line
      work++;
    }
    bar->done();
    
  5. 自动迭代容器:在遍历容器时自动显示进度条。

    std::vector<float> v(300, 0);
    std::iota(v.begin(), v.end(), 1); // 1, 2, 3, ..., 300
    float sum = 0;
    for (auto x : bk::IterableBar(v, {.message = "Summing", .interval = .02})) {
      std::this_thread::sleep_for(1.s/x);
      sum += x;
    }
    std::cout << "Sum: " << sum << std::endl;
    
  6. 函数监控进度:使用函数(如 lambda)来监控进度。

    unsigned long total_area = 10000;
    unsigned long width = 0, height = 0;
    auto bar = bk::ProgressBar([&] { return width * height; }, {
        .total = total_area,
        .message = "Sweeping area",
        .speed = 1.,
    });
    while (width < 100 and height < 100) {
      std::this_thread::sleep_for(70ms);
      if (width < 100) { width++; }
      if (height < 100) { height++; }
    }
    
  7. 组合显示:使用 | 运算符组合多个显示组件。

    std::atomic<size_t> sents{0}, toks{0};
    auto bar =
        bk::ProgressBar(&sents, {
          .total = 1010, 
          .message = "Sents",
          .show = false}) |
        bk::Counter(&toks, {
          .message = "Toks", 
          .speed = 1., 
          .speed_unit = "tok/s",
          .show = false});
    bar->show();
    for (int i = 0; i < 1010; i++) {
      // do work
      std::this_thread::sleep_for(13ms);
      sents++;
      toks += (1 + rand() % 5);
    }
    bar->done();
    

这些应用场景展示了 barkeep 的灵活性和广泛的使用范围,无论是对于简单的等待动画还是复杂的进度监控,barkeep 都能提供有效的解决方案。

项目特点

barkeep 项目的特点如下:

  1. 轻量级:仅包含单个头文件,易于集成和使用。
  2. 非侵入式:设计上尽量减少对现有代码的修改。
  3. 多语言支持:除了 C++,还提供了 Python 绑定。
  4. 功能丰富:支持异步动画、计数器和进度条显示。
  5. 易于定制:提供了多种样式和配置选项,满足不同需求。
  6. 高性能:异步显示和高效的数据处理确保了高性能。

barkeep 作为一个开源项目,不仅提供了强大的功能,还具有良好的设计和易用性,使其成为各种项目中的理想选择。无论你是需要为终端应用程序添加进度条,还是希望在数据处理过程中提供实时反馈,barkeep 都能帮助你轻松实现。

barkeep Small C++ header to display async animations, counters, progress bars, and status messages barkeep 项目地址: https://gitcode.com/gh_mirrors/bar/barkeep

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱纳巧Gillian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值