CAF(C++ actor framework)使用随笔(unbecome与keep_behavior用法)
2016-03-09 14:02
706 查看
![](http://images2015.cnblogs.com/blog/901129/201603/901129-20160309134722069-1502287419.png)
看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 = 1; float a2 = 1.1; double a3 = 1.2; int b1 = 2; 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 0; }
结果为
![](http://images2015.cnblogs.com/blog/901129/201603/901129-20160309135728647-1453846522.png)
如果把value2循环中的keep_behavior去掉结果就是
![](http://images2015.cnblogs.com/blog/901129/201603/901129-20160309135915163-1409506974.png)
之后开始准备写caf序列化方面。真的是挺好用,挺炫酷。
最后弱弱的说一句,求互粉阿!
相关文章推荐
- C++使用SQLite步骤及示例
- C++ 泛型基础
- 数组退化成指针
- map::erase的使用
- C++:<sstream>头文件的应用
- C++ 使用ifstream和getline读取txt文件内容
- C++面向对象高级编程笔记02--GeekBand
- C++面试题一大波
- C/C++ 声明与定义
- C语言getmemory使用
- 学习C++该看什么书?
- C/C++ extern详解
- 智能指针auto_prt的使用(c++学习笔记)
- 【C++11】新特性——auto的使用
- C++——try、throw、catch实例学习程序
- 《More Effective C++》 Rule 4: 非必要不提供默认构造函数
- Cpp--改变形参指针无法实现双向传值的问题
- 实例讲解C++编程中对设计模式中的原型模式的使用
- 解析设计模式中的Prototype原型模式及在C++中的使用
- C++多重继承下的指针类型转换