欢迎来到BThreadPack的官方文档!

小技巧

当前文档是稳定版。需要需要查看当前开发版的文档?请点击这里

欢迎来到BThreadPack的官方文档。BThreadPack是一个具有完整线程管理、任务管理和调度的线程池组件包。 如果您是第一次接触到这个项目,请先阅读 项目描述 来大概了解一些这个项目。

注解

本文档由开发者撰写,对文档内容的有效性不提供任何担保。

BThreadPack

GitLab GitLab Documentation Status

好用的线程池工具包。

特性

  • 能够满足通用任务和特定任务两种线程池模型
  • 随时可以控制线程池的运转
  • 用于线程间通讯的消息队列机制
  • 线程数量优化机制
  • 每个任务都是线程安全的

如何开始

通过以下步骤,你将获得本项目的源代码用于开发或者测试。

系统要求

若你想在你的平台上使用 BThreadPack,必须满足以下条件。 ` 系统: Linux (此项目只在Linux系统上进行过测试) gcc 版本 > 4.8 (需要 c++11 支持) `

源代码结构

  • include: 所有的头文件
  • src: 所有的源代码
  • Examples: 一些示例帮助你理解如何使用这个工具包

安装

BThreadPack 不依赖任何第三方模块(只需要STL)。

步骤1. 构建目标文件

` make `

步骤2. 安装到系统

此步骤需要root权限。

` make install `

安装成功后,就可以构建 Examples 目录下的示例用于测试。

运行示例程序

Examples

此文件夹下包含了一些用于帮助你理解如何使用本工具包的示例项目。

阅读 [./examples/README.md](./examples/README.md) 获取更多信息。

版本信息

获取可用版本,请参阅 [tags on this repository](https://gitlab.com/zhangbolily/bthreadpack/tags)。

作者

  • Ball Chang - 构建了整个项目

许可证

本项目使用了 MIT 许可 - 阅读 [LICENSE.md](LICENSE.md) 获取更多信息。

致谢

  • GitLab

BAbstractTask

BAbstractTask 提供了所有任务类的底层抽象,任何运行于线程池中的任务都是继承自这个类。更多..

属性
头文件 #include <BAbstractTask.h>
最低版本 0.1.1-alpha
被继承 BGeneralTask

注解

BAbstractTask中的成员函数都是线程安全的。

公有类型

   
enum BTaskStatus { TaskFailed, TaskInit, TaskExecuting, TaskFinished }

公有成员

类型 成员名
BAbstractTask()
BAbstractTask(bool _autodestroy)
BAbstractTask(void* _buffer, size_t _size)
BAbstractTask(bool _autodestroy, void* _buffer, size_t _size)
virtual ~BAbstractTask()
bool destroyable()
int inputBuffer(void** _buffer, size_t &_size)
mutex m_task_mutex
int outputBuffer(void** _buffer, size_t &_size)
int setInputBuffer(void* _buffer, size_t _size)
int setOutputBuffer(void* _buffer, size_t _size)
int setStatus(BTaskStatus _status)
int setStatus(atomic_int _status)
int status()

详细描述:

BAbstractTask 提供了所有任务类的底层抽象,任何运行于线程池中的任务都是继承自这个类。

BAbstractTask 及其派生类都应当遵循只串行化运行的原则,也就是说同一时刻只能有一个线程在访问该对象。 BAbstractTask 使用 m_task_mutex 这个互斥锁来实现这一机制,确保任意时刻只有一个线程拥有该锁,其他尝试获取该锁的线程都应该立即返回一个错误值而不是继续等待获取该锁。

BAbstractTask()

构建一个BAbstractTask对象。

BAbstractTask(bool _autodestroy)

构建一个BAbstractTask对象。参数 _autodestroy 表示是否自动析构。

当该任务被线程池(仅BGeneralThreadPool支持)执行完成后会通过 destroyable() 检查该属性,若为true线程函数会自动析构这个任务对象。

BAbstractTask(void* _buffer, size_t _size)

构建一个BAbstractTask对象。参数_buffer指向需要传入的数据所在的内存地址,_size表示这块内存的大小。

BAbstractTask会将该内存块的数据复制到一个新的内存区域中,由BAbstractTask来进行管理该内存块。_buffer指针在传入之后,就可以立即释放该内存地址指向的资源。

BAbstractTask(bool _autodestroy, void* _buffer, size_t _size)

构建一个BAbstractTask对象。参数_autodestroy 表示是否自动析构,_buffer指向需要传入的数据所在的内存地址,_size表示这块内存的大小。

当该任务被线程池(仅BGeneralThreadPool支持)执行完成后会通过 destroyable() 检查该属性,若为true线程函数会自动析构这个任务对象。同时BAbstractTask会将_buffer指向的数据复制到一个新的内存区域中,由BAbstractTask来进行管理该内存块。_buffer指针在传入之后,就可以立即释放该内存地址指向的资源。

virtual ~BAbstractTask()

析构BAbstractTask对象。

bool destroyable()

返回 _autodestroy 的属性值,如果为true表示该对象可以被主动析构。

int inputBuffer(void** _buffer, size_t &_size)

获取任务的输入数据。

该函数返回 BThreadPack::ReturnCode::BOnlySingleThread 表示该BAbstractTask对象正被多个线程共享。其他情况下均返回 BThreadPack::ReturnCode::BSuccess。

int outputBuffer(void** _buffer, size_t &_size)

获取任务的输出数据。

该函数返回 BThreadPack::ReturnCode::BOnlySingleThread 表示该BAbstractTask对象正被多个线程共享。其他情况下均返回 BThreadPack::ReturnCode::BSuccess。

int setInputBuffer(void* _buffer, size_t _size)

设置任务的输入数据。参数_buffer指向需要传入的数据所在的内存地址,_size表示这块内存的大小。

返回 BThreadPack::ReturnCode::BOnlySingleThread 表示该BAbstractTask对象正被多个线程共享。返回 BThreadPack::ReturnCode::BError 表示输入参数有误。其他情况下均返回 BThreadPack::ReturnCode::BSuccess。

int setOutputBuffer(void* _buffer, size_t _size)

设置任务的输出数据。参数_buffer指向需要输出的数据所在的内存地址,_size表示这块内存的大小。

返回 BThreadPack::ReturnCode::BOnlySingleThread 表示该BAbstractTask对象正被多个线程共享。返回 BThreadPack::ReturnCode::BError 表示输入参数有误。其他情况下均返回 BThreadPack::ReturnCode::BSuccess。

int setStatus(BTaskStatus _status)

设置任务的状态。

int setStatus(atomic_int _status)

设置任务的状态。

int status()

返回任务的状态。

BGeneralTask

BGeneralTask 继承自BAbstractTask,提供通用的任务模型。更多..

属性
头文件 #include <BGeneralTask.h>
最低版本 0.1.1-alpha
继承自 BAbstractTask

注解

BGeneralTask中的成员函数都是线程安全的。

公有成员

类型 成员名
BGeneralTask()
BGeneralTask(bool _autodestroy)
BGeneralTask(void* _buffer, size_t _size)
BGeneralTask(bool _autodestroy, void* _buffer, size_t _size)
virtual ~BGeneralTask()
virtual int execute()

详细描述:

BGeneralTask 提供了所有任务类的底层抽象,任何运行于线程池中的任务都是继承自这个类。

BGeneralTask 及其派生类都应当遵循只串行化运行的原则,也就是说同一时刻只能有一个线程在访问该对象。 BGeneralTask 使用 m_task_mutex 这个互斥锁来实现这一机制,确保任意时刻只有一个线程拥有该锁,其他尝试获取该锁的线程都应该立即返回一个错误值而不是继续等待获取该锁。

BGeneralTask()

构建一个BGeneralTask对象。

BGeneralTask(bool _autodestroy)

构建一个BGeneralTask对象。参数 _autodestroy 表示是否自动析构。

当该任务被线程池(仅BGeneralThreadPool支持)执行完成后会通过 destroyable() 检查该属性,若为true线程函数会自动析构这个任务对象。

BGeneralTask(void* _buffer, size_t _size)

构建一个BGeneralTask对象。参数_buffer指向需要传入的数据所在的内存地址,_size表示这块内存的大小。

BGeneralTask会将该内存块的数据复制到一个新的内存区域中,由BGeneralTask来进行管理该内存块。_buffer指针在传入之后,就可以立即释放该内存地址指向的资源。

BGeneralTask(bool _autodestroy, void* _buffer, size_t _size)

构建一个BGeneralTask对象。参数_autodestroy 表示是否自动析构,_buffer指向需要传入的数据所在的内存地址,_size表示这块内存的大小。

当该任务被线程池(仅BGeneralThreadPool支持)执行完成后会通过 destroyable() 检查该属性,若为true线程函数会自动析构这个任务对象。同时BGeneralTask会将_buffer指向的数据复制到一个新的内存区域中,由BGeneralTask来进行管理该内存块。_buffer指针在传入之后,就可以立即释放该内存地址指向的资源。

virtual ~BGeneralTask()

析构BGeneralTask对象。

virtual int execute()

Indices and tables