CAF(C++ actor framework)使用随笔(unbecome与keep_behavior用法)
看usermanual(使用随笔一里面有)看到差不多一半的时候,这个keep_behavior与unbeacome的结合引起了我的注意。(这是为什么呢?)
因为它的示例代码写的太简单了!我真的没看太懂,我就自己把他的改了改放上来。
先讲一下,基本概念,就是一个actor可以有多个行为(behavior)那么become就可以让一个actor变成一种行为。
如果使用了keep_behavior呢就会把当前的行为压入“行为栈”(behavior stack), 调用unbecome就可以变成行为栈上最前面的一个了。
比如我先在行为A的时候keep_behavior,后来我再在行为B的时候keep_behavior一下,那么我此时调用unbecome的时候会变成哪个种行为呢?答案当然是行为B咯!
贴上代码
#include <string>
#include <iostream>
#include "caf/io/all.hpp"
#include "caf/all.hpp"
using namespace std;
using namespace caf; behavior testee(event_based_actor* self) {
return {
[=](int value1) {
cout<<"value1:"<<value1<<endl;
self->become (
keep_behavior,
[=](float value2) {
cout << "value2:" << value2 << endl;
self->become (
keep_behavior,
[=](double value3){
cout<<"value3:"<<value3<<endl;
self->unbecome();
}
);
});
}
};
} int main(){
auto actor1 = spawn(testee);
{
caf::scoped_actor self;
int a1 = ;
float a2 = 1.1;
double a3 = 1.2;
int b1 = ;
float b2 = 2.1;
double b3 = 2.2; self->send(actor1,a1);
self->send(actor1,a2);
self->send(actor1,a3);
self->send(actor1,b1);
self->send(actor1,b2);
self->send(actor1,b3);
}
caf::await_all_actors_done();
shutdown();
return ;
}
结果为

如果把value2循环中的keep_behavior去掉结果就是

之后开始准备写caf序列化方面。真的是挺好用,挺炫酷。
最后弱弱的说一句,求互粉阿!
CAF(C++ actor framework)使用随笔(unbecome与keep_behavior用法)的更多相关文章
- CAF(C++ actor framework)使用随笔(projection 用法)(一)
最近干活在写毕设,用到了CAF,看了文档,发现了一些小坑,自己摸索写点随笔.(CAF的github网站 https://github.com/actor-framework/actor-framewo ...
- CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)
Class-based actorsA class-based actor is a subtype of event_based_actor and must implement the pure ...
- CAF(C++ actor framework)使用随笔(延迟发送,消息转发,消息优先级)(四)
e). 消息延迟发送(和前面没太大区别直接上代码) #include <iostream> #include "caf/all.hpp" #include " ...
- CAF(C++ actor framework)使用随笔(同步发送 异步与同步等待)(三)
c). 同步发送, 等待响应, 超时后收到1个系统消息. 贴上代码 #include <iostream> #include "caf/all.hpp" #includ ...
- CAF(C++ actor framework)使用随笔(send sync_send)(二)
a). 发完就忘, 就像上面anon_send 以及send #include <iostream> #include "caf/all.hpp" #include & ...
- CAF(C++ actor framework)(序列化之结构体,任意嵌套STL)(一)
User-Defined Data Types in Messages(用户自定义类型)All user-defined types must be explicitly “announced” so ...
- CAF(C++ actor framework)(序列化之类,无需序列化,直接传)(二)
昨天讲了Struct,还是不够满意,毕竟C++里面类用的比较多嘛,那就先上个类, 这段代码是我稍微改编了一下的结果.都是最基本的用法. #include <utility> #includ ...
- CAF(C++ actor framework)(序列化之复杂类,分析 还有自己不懂的细思恐极函数实现)(三)
这里应该是序列化的最后一篇.感觉自己写的不是很好,也一点点在学习.这次就不贴上代码了.代码在github上的announce5.cpp.代码简单,但是分析下去会有细思恐极的感觉! 先看一下几个函数是干 ...
- “幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】
刘德华 有一首歌叫<马桶>,其中有一句歌词是:每一个马桶都是英雄. EFCore也有一个英雄,在幕后默默地任劳任怨.它就叫 "支持字段" (Backing Fields ...
随机推荐
- Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
Problem A. AerodynamicsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...
- Sublime Text 备忘
Sublime Text已经被传成编程利器,那当然也是我们前端的利器了,刚开始用的时候,很多小问题,所以做个备忘,忘记的时候也可以翻出来看看,下次重装的时候可以用到. 1.设置自动换行 菜单栏 Vie ...
- Swift 3.0 的 open,public,internal,fileprivate,private 关键字
import Foundation /// final的含义保持不变 public final class FinalClass { } // 这个类在ModuleA的范围外是不能被继承的 ...
- innodb_max_dirty_pages_pct与检查点的关系
http://ourmysql.com/archives/310 数据库运行一段时间后,经常导致服务器大量的swap,我怀疑是innodb中的脏数据太多了,因为没有free space了,mysq ...
- C 高级编程 2 内存管理
理解malloc的工作原理: malloc使用一个数据结构(链表)来维护分配的空间.链表的构成: 分配的空间.上一个空间的地址.下一个空间的地址.以及本空间的信息等. 对malloc分配的空间不要越界 ...
- Dijkstra最短路径算法[贪心]
Dijkstra算法的标记和结构与prim算法的用法十分相似.它们两者都会从余下顶点的优先队列中选择下一个顶点来构造一颗扩展树.但千万不要把它们混淆了.它们解决的是不同的问题,因此,所操作的优先级也是 ...
- 理解php Hash函数,增强密码安全
1.声明 密码学是一个复杂的话题,我也不是这方面的专家.许多高校和研究机构在这方面都有长期的研究.在这篇文章里,我希望尽量使用简单易懂的方式向你展示一种安全存储Web程序密码的方法. 2.“Hash” ...
- iOS:插件制作入门
本文将介绍创建一个Xcode4插件所需要的基本步骤以及一些常用的方法.请注意为Xcode创建插件并没有任何的官方支持,因此本文所描述的方法和提供的信息可能会随Apple在Xcode上做的变化而失效.另 ...
- ASP.NET 之 检测到在集成的托管管道模式下不适用的ASP.NET设置
将ASP.NET程序从IIS6移植到IIS7后,调试运行可能提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP. ...
- [转载]BigPipe技术
1. 技术背景 FaceBook页面加载技术 试想这样一个场景,一个经常访问的网站,每次打开它的页面都要要花费6 秒:同时另外一个网站提供了相似的服务,但响应时间只需3 秒,那么你会如何选择呢?数据表 ...