欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > brpc之ClosureGuard

brpc之ClosureGuard

2025/5/21 2:22:54 来源:https://blog.csdn.net/wuli2496/article/details/145099760  浏览:    关键词:brpc之ClosureGuard

简介

使用RAII用于闭包Closure自动执行run

结构

ClosureGuard
- Closure* _done
+ClosureGuard()
+ClosureGuard(google::protobuf::Closure* done)
+~ClosureGuard()
+void reset(google::protobuf::Closure* done)
+google::protobuf::Closure* release()
+bool empty()
+void swap(ClosureGuard& other)

ClosureGuard():构造函数,初始闭包_done为null

ClosureGuard() : _done(NULL) {}

ClosureGuard(google::protobuf::Closure* done):构造函数,初始闭包

explicit ClosureGuard(google::protobuf::Closure* done) : _done(done) {}

~ClosureGuard():析构函数,自动执行闭包的run方法

~ClosureGuard() 
{if (_done) {_done->Run();}
}

void reset(google::protobuf::Closure* done) :重新设置闭包,会先执行设置前的闭包

void reset(google::protobuf::Closure* done) 
{if (_done) {_done->Run();}_done = done;
}

google::protobuf::Closure* release():释放闭包,此时析构函数不会执行闭包的run方法

google::protobuf::Closure* release() 
{google::protobuf::Closure* const prev_done = _done;_done = NULL;return prev_done;
}

bool empty():检查闭包是否为空

bool empty() const { return _done == NULL; }

void swap(ClosureGuard& other):交换闭包

void swap(ClosureGuard& other) { std::swap(_done, other._done); }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词