看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用法)的更多相关文章

  1. CAF(C++ actor framework)使用随笔(projection 用法)(一)

    最近干活在写毕设,用到了CAF,看了文档,发现了一些小坑,自己摸索写点随笔.(CAF的github网站 https://github.com/actor-framework/actor-framewo ...

  2. CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)

    Class-based actorsA class-based actor is a subtype of event_based_actor and must implement the pure ...

  3. CAF(C++ actor framework)使用随笔(延迟发送,消息转发,消息优先级)(四)

    e). 消息延迟发送(和前面没太大区别直接上代码) #include <iostream> #include "caf/all.hpp" #include " ...

  4. CAF(C++ actor framework)使用随笔(同步发送 异步与同步等待)(三)

    c). 同步发送, 等待响应, 超时后收到1个系统消息. 贴上代码 #include <iostream> #include "caf/all.hpp" #includ ...

  5. CAF(C++ actor framework)使用随笔(send sync_send)(二)

    a). 发完就忘, 就像上面anon_send 以及send #include <iostream> #include "caf/all.hpp" #include & ...

  6. CAF(C++ actor framework)(序列化之结构体,任意嵌套STL)(一)

    User-Defined Data Types in Messages(用户自定义类型)All user-defined types must be explicitly “announced” so ...

  7. CAF(C++ actor framework)(序列化之类,无需序列化,直接传)(二)

    昨天讲了Struct,还是不够满意,毕竟C++里面类用的比较多嘛,那就先上个类, 这段代码是我稍微改编了一下的结果.都是最基本的用法. #include <utility> #includ ...

  8. CAF(C++ actor framework)(序列化之复杂类,分析 还有自己不懂的细思恐极函数实现)(三)

    这里应该是序列化的最后一篇.感觉自己写的不是很好,也一点点在学习.这次就不贴上代码了.代码在github上的announce5.cpp.代码简单,但是分析下去会有细思恐极的感觉! 先看一下几个函数是干 ...

  9. “幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】

    刘德华 有一首歌叫<马桶>,其中有一句歌词是:每一个马桶都是英雄. EFCore也有一个英雄,在幕后默默地任劳任怨.它就叫 "支持字段" (Backing Fields ...

随机推荐

  1. Codeforces Round #282 (Div. 1) A. Treasure 水题

    A. Treasure Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/494/problem/A ...

  2. C++指针和引用

     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指 ...

  3. Metadata Lock原理6

      一 简介   上一篇文章 <MetaData Lock 之一>  简单的介绍了MySQL 引入MDL 的前因后果,本文深入了解MDL的实现原理和运行机制.二 MDL 的类型  meta ...

  4. SQL SERVER NULL值和连接注意问题

    联接表的列中的 null 值(如果有)互相不匹配.如果其中一个联接表的列中出现空值,只能通过外部联接返回这些空值(除非 WHERE 子句不包括空值).   下面的两个表中,每个表中要参与联接的列中均包 ...

  5. debian创建apt-proxy代理

    由于公司网络比较慢.所以需要建立一个代理服务器或镜象站点!考虑到创建和维护镜象的投入比较大!所以选择apt-proxy代理来做!可以缓解公司带宽不足的矛盾.而且只有在代理缓存,没有相应组件的情况下才去 ...

  6. debian下Vnc

    1 VNC(Virtual Network Computing,虚拟网络计算)最早是一套由英国剑桥大学AT&T实验 室在2002年开发的轻量型的远程控制计算机软件,其采用了 GPL 授权条款, ...

  7. PHP.3-DIV+CSS标准网页布局准备工作(上)

    DIV+CSS标准网页布局准备工作(上) 概述 使用"DIV+CSS"对网站进行布局符合W3C标准,采用这种方式布局通常是为了说明与HTML表格定位方式的区别.因为现在的网站设计标 ...

  8. sed程序

    程序1: 实现简单的shell sed替换功能 程序2:修改haproxy配置文件  1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { ...

  9. CF Polycarpus' Dice (数学)

    Polycarpus' Dice time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  10. jQuery 显示加载更多

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...