看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;
}
结果为
如果把value2循环中的keep_behavior去掉结果就是
之后开始准备写caf序列化方面。真的是挺好用,挺炫酷。
最后弱弱的说一句,求互粉阿!
原文链接: https://www.cnblogs.com/zhejiangxiaomai/p/5257937.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/229970
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!