brpc学习(二)
2018年12月22日 星期六, 发表于 深圳
如果你对本文有任何的建议或者疑问, 可以在 这里给我提 Issues, 谢谢! :)
brpc util中有很多有用的库,brpc学习一 中已经介绍了一部分,本文接上文,继续学习了解brpc的基础类库
如果文章有任何冒犯之处,如侵权或者未标明引用,请邮件联系删除
1. atext
在这篇博文里面坐着介绍到: https://blog.csdn.net/drdairen/article/details/51896141
简单的说,exit函数将终止调用进程。在退出程序之前,所有文件关闭,缓冲输出内容将刷新定义,并调用所有已刷新的“出口函数”(由atexit定义)
也就是说给系统注册一个进程退出回调函数,当进程退出的时候,调用相应的回调函数
2. AtExitManager
AtExitManager功能类似于atexit函数,当类AtExitManager析构的时候,会调用RegisterCallback函数注册的回调函数;
AtExitManager::~AtExitManager() {
if (!g_top_manager) {
NOTREACHED() << "Tried to ~AtExitManager without an AtExitManager";
return;
}
DCHECK_EQ(this, g_top_manager);
ProcessCallbacksNow();
g_top_manager = next_manager_;
}
// static
void AtExitManager::ProcessCallbacksNow() {
if (!g_top_manager) {
NOTREACHED() << "Tried to ProcessCallbacksNow without an AtExitManager";
return;
}
AutoLock lock(g_top_manager->lock_);
while (!g_top_manager->stack_.empty()) {
Callback task = g_top_manager->stack_.top();
task.func(task.param);
g_top_manager->stack_.pop();
}
}
3. AutoReset
AutoReset类用于在某一个范围类将某一个变量设置为新的值,实现原理,类似于上面的AtExitManager,构造赋值,析构还原;
AutoReset(T* scoped_variable, T new_value)
: scoped_variable_(scoped_variable),
original_value_(*scoped_variable) {
*scoped_variable_ = new_value;
}
~AutoReset() { *scoped_variable_ = original_value_; }