[TOC]
# cpplib_base
C++公用基础库,仿照chromium-base,提供一些基本的功能实现,可以在项目中方便导入,提高开发效率.
# 编译说明
```
git submodule update --init --recursive
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug/Release
make
```
# 单元测试
可以在make编译完后执行`make test`,或者直接运行生成的单元测试程序`base_unittest`.
# 开发计划
先列着,慢慢来吧~~~
类或函数 | 文件 | 说明 | 完成情况
-- | -- | -- | --
TaskQueue | base/thread/task_queue.h | 任务队列 | 已完成
MessageLoop | base/thread/message_loop.h | 消息循环队列 | 已完成
Thread | base/thread/thread.h | 基于消息循环的线程 | 已完成
LOG | base/log/logging.h | 日志 | 已完成
Singleton | base/singleton.h | 单例模板类 | 已完成
AtExitManager | base/at_exit.h | 注册退出函数 | 已完成
Base64Encode/Base64Decode | base/encode/base64.h | base64加密和解密 | 已完成
Md5 | base/encode/md5.h | md5散列 | 已完成
CRC32 | base/hash/crc32.h | crc32校验值计算 | 已完成
Hash | base/hash/hash.h | hash散列 | 已完成
ThreadPool | base/thread/thread_pool.h | 基于消息循环线程的线程池 | 已完成
ElapsedTimer | base/timer/elapsed_timer.h | 计时器 | 已完成
DelayTimer | base/timer/delay_timer.h | 定时器 | 已完成
Json | 简单封装,复杂操作请直接使用rapidjson,位于`src/base/third_party/rapidjson` | Json库封装 | 已完成,可参考单元测试`src/test/json/json_unittest.cc`
TreeArray | base/array/tree_array.h | 树型数组 | 已完成
GUID | base/guid.h | 生成guid | 已完成
Rand | base/rand_util.h | 产生简单的随机数 | 已完成
String | base/string/string_utils.h | 提供字符串比较、判断开头和结尾等操作 | 部分完成,待后续完善
File | base/file/file.h | 文件跨平台封装 | 待开发
IPCHandler | base/ipc/ipc_handler.h | 封装跨平台进程间通信 | 待开发
Process | base/process/process.h | 封装跨平台进程创建和运行 | 待开发
TCPServer | base/net/tcp_server.h | 封装跨平台tcp server(两种网络模型) | 待开发
TCPClient | base/net/tcp_client.h | 封装跨平台tcp client | 待开发
UDPServer | base/net/udp_server.h |封装跨平台udp server |待开发
UDPClient | base/net/udp_client.h| 封装跨平台udp client|待开发
Metrics | base/metrics.h | 封装数据统计接口 | 待开发
# 常用类说明
## TaskQueue
任务队列,提供任务入队和出队操作,提供锁保护
### 接口
函数 | 说明 | 注意事项
-- | --| --
PushTask | 任务入队 | 自带锁保护
PopTask | 任务出队 | 自带锁保护
Empty | 任务队列是否为空 |
Clear | 清空队列 | 自带锁保护
## MessageLoop
消息循环队列,使用它可以将任何当前线程改造成消息循环线程.
### 示例
```
#include "base/thread/message_loop.h"
base::MessageLoop loop;
loop.BindToCurrentThread();
......
loop.RunLoop();
```
### 接口
函数 | 说明 | 注意事项
-- | --| --
RunLoop | 调用之后,当前线程会进入循环,可以处理其他线程抛过来的任务 | 除非其他线程有调用它的`Stop()`函数, 它才能退出循环
PostTask | 抛任务,任务执行完不会回调 | 可在任意线程上调用
PostTaskAndReply | 抛任务,带回调,抛出的任务执行完后,**回调函数会被抛回源线程执行** | 传递的回调函数不能传递参数,带参数版本的借口待开发
PostDelayTask/PostDelayTaskAndReply | 延时执行任务的版本 |
Stop | 任务都执行完后,停止消息循环 | 调用后就不会再接收新的任务
StopSoon | 清空任务队列,立即停止消息循环 |
### 优化方向
* 提供可传递参数的PostTask回调: `PostTaskAndReplyWithResult`;
## Thread
基于消息循环的线程类
### 示例
```
#include "base/thread/thread.h"
base::Thread thread_io;
thread_io.Start();
thread_io.PostTaskAndReply(...);
```
### 接口
函数 | 说明 | 注意事项
-- | -- | --
SetName/GetName | 给线程取名 |
Start/Stop | 启动/停止线程 | Start保证任务队列启动成功
PostTask/PostTaskAndReply | 抛任务 | 对MessageLoop借口的封装
PostDelayTask/PostDelayTaskAndReply | 延时执行的任务 | 对MessageLoop借口的封装
Stop | 执行完任务后,关闭线程|
StopSoon | 清空尚未执行的任务,关闭线程
## LOG
简单的日志系统,可选择打印到控制台或者写入到日志文件中.
![image](https://github.com/243286065/pictures_markdown/blob/master/media/h264/5d42c4769e6b7f95f865cb562fee1ab3.png?raw=true)
日志格式: `[进程号:线程号:日期/时间.微秒:日志级别:文件(行号)] 日志内容`
使用示例:
```
#include "base/log/logging.h"
// 初始化日志配置
logging::InitLogging("test.log", logging::LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG, logging::APPEND_TO_OLD_LOG_FILE);
LOG(INFO) << "------------------------------END------------------------------------------" << 1;
```
### 接口
函数或接口 | 说明 | 注意事项
-- | -- | --
SetLogMessageHandler | 自定义日志处理函数,可用通过设置接口由程序自己控制日志处理. 函数原型`bool(int severity, const char* file, const int line, const char* message)>` | 当设置的日志回调函数返回`true`时表示不再由日志系统对日志进行处理,返回`false`时,日志系统将继续处理这条日志.
GetLogMessageHandler | 获取当前自定义日志处理函数 | 默认为`nullptr`
SetMinLogLevel/GetMinLogLevel | 设置或获取会被处理日志的最低级别.日志供分为`LOG_DEBUG`/`LOG_INFO`/`LOG_WARNING`/`LOG_ERROR`/`LOG_FATAL`,其值分别标识`-1~3`. | 默认debug模式下最低级别为`LOG_DEBUG`,release模式下为`LOG_WARNING`
InitLogging | 对默认日志配置进行修改,`LoggingDestination`参数表示日志是要输出到文件还是控制台; `OldFileDeletionState`参数决定当日志文件重名时,要不要删除旧文件重写 | 如果不调用这个接口,日志系统会以默认参数运行(日志只打印到控制台)
LOG | 创建日志,可以使用`LOG(DEBUG)/LOG(INFO)/LOG(WARNING)/LOG(ERROR)/LOG(FATAL)`来创建对应级别的日志. | 日志级别小于所设置的最低处理级别时,日志不会被处理.
DLOG | DEBUG模式下才会处理的日志 |
CHECK | 检查条件是否成立,类似`assert`的作用 |
DCHECK | DEBUG模式下才会生效的CHECK|
### 优化方向
* 日志文件大小限制,包括单个文件大小和总的日志文件大小;
* 合并写入日志文件,减少写文件操作.
## Singleton
一个简单的单例类模板,使用了锁保证创建单例对象的线程安全,但是不保证其他对象逻辑线程安全.
使用示例:
```
#include "base/singleton.h"
class A {...};
typedef Singleton<A> ASingleton;
ASingleton::GetInstance()->...
```
只为了在项目中创建单例类方便,很简单,没什么好讲的.
## AtExitManager
其作用类似atexit(),即在声明周期结束后执行所注册的回调。在该对象的生命周期内可注册多个回调函数,在对象销毁时所有的注册函数按照出栈的形式来调用。
示例:
```
#include "base/at_exit.h"
#include "base/log/logging.h"
void printResult(int sum) {
LOG(INFO) << "-------sum-------" << sum;
}
int main() {
base::AtExitManager exit_manager;
base::AtExitManager::RegisterCallback(std::bind(printResult, 100));
base::AtExitManager::RegisterCallback(std::bind(printResult, 101));
base::AtExitManager::RegisterCallback(std::bind(printResult, 102));
{
base::AtExitManager exit_manager_2;
base::AtExitManager::RegisterCallback(std::bind(printResult, 103));
base::AtExitManager::RegisterCallback(std::bind(printResult, 104));
base::AtExitManager::RegisterCallback(std::bind(printResult, 105));
}
base::AtExitManager exit_manager_3;
base::AtExitManager::RegisterCallback(std::bind(printResult, 107));
base::AtExitManager::RegisterCallback(std::bind(printResult, 108));
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备
资源推荐
资源详情
资源评论
收起资源包目录
C++公用基础库,仿照chromium-base,提供一些基本的功能实现,可以在项目中方便导入,提高开发效率..zip (73个子文件)
cm
CMakeLists.txt 6KB
src
demo
thread_test.cc 7KB
base
thread
thread_pool.cc 1KB
thread_pool.h 781B
thread.h 1KB
message_loop.cc 2KB
message_loop.h 1KB
message_loop_manager.h 859B
closure.cc 1KB
message_loop_manager.cc 881B
thread.cc 3KB
task_queue.h 969B
closure.h 870B
task_queue.cc 1KB
time
time.cc 6KB
time.h 5KB
macros.h 342B
file
file_utils.cc 696B
file_utils.h 324B
encode
base64.h 572B
base64.cc 1KB
utils.cc 1KB
array
tree_array.h 1KB
testing
test_main.cc 714B
at_exit.cc 1KB
timer
delay_timer.h 748B
delay_timer.cc 1KB
elapsed_timer.h 672B
elapsed_timer.cc 413B
guid.cc 2KB
stl_util.h 250B
rand_util.h 2KB
at_exit.h 729B
string
string_utils_internal.h 3KB
string_convert.cc 1KB
stringprintf.cc 4KB
stringprintf.h 667B
string_utils.cc 3KB
string_convert.h 837B
string_utils.h 4KB
singleton.h 787B
base_export.h 201B
guid.h 1KB
rand_util.cc 3KB
compiler_special.h 1KB
callback.h 159B
json
json.h 4KB
json.cc 4KB
third_party
crc32
crc32.hpp 67KB
googletest
rapidjson
cityhash
city.h 5KB
city.cc 19KB
modp_b64
modp_b64.h 4KB
modp_b64.cc 7KB
modp_b64_data.h 29KB
hash
hash.cc 953B
crc32.cc 895B
md5.h 2KB
md5.cc 9KB
hash.h 801B
crc32.h 232B
log
logging.h 3KB
logging.cc 4KB
utils.h 456B
test
string
string_unittest.cc 6KB
guid
rand_unittest.cc 5KB
guid_unittest.cc 1KB
json
json_unittest.cc 2KB
hash
crc32_unittest.cc 1KB
md5_unittest.cc 1KB
LICENSE 1KB
.gitmodules 266B
.gitignore 296B
README.md 20KB
共 73 条
- 1
资源评论
妄北y
- 粉丝: 9709
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功