CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)
Class-based actors
A class-based actor is a subtype of event_based_actor and must implement the pure virtual member function make_behavior returning the initial behavior.
原话告诉我们两点:1.必须继承“ event_based_actor”。
2.重载make_behavior的函数,其实就是这个类的构造函数,定义了这个初始行为。
关于第一点呢,说明这个类可以使用很多基本的send,看了一点点源码发现event_based_actor间接继承了一个叫 localactor 的类,关于这个以类为基础构造的actor的用法可以去里面找,还是很方便的。
关于第二点,比较简单,就是要注意,以函数来构造的actor,会传入参数,但是这个main_behavior是不用参数的。
第二点带来的问题,就是函数构造的actor发送给自己消息只需要self来只待自己,如
self ->send(self,"hello");
现在不行了,自己就想到一种办法就是在类内声明一个scoped_actor,发送给this指针(在本地发送应该是用指针的)。
#include <string>
#include <iostream>
#include "caf/io/all.hpp"
#include "caf/all.hpp"
using namespace std;
using namespace caf; class SlaveNodeActor : public event_based_actor {
public:
behavior make_behavior() override {
scoped_actor a;
a->send(this,"hello");
return {
[=](const string& str ) {
cout << str << endl;
quit();
},
caf::others >> [=]() {
cout << "unkown message" << endl;
}
};
}
}; int main(){
auto slave_actor = caf::spawn<SlaveNodeActor>();
caf::await_all_actors_done();
return ;
}
然后,最近写代码发现这样一种用法,就是类A存放这actor的信息如IP,端口号,以及这个actor本身的信息,作为一个人就需要姓名,而类B继承了event_based_actor,作为类A的友元类去调用A的信息,B的构造函数需要传入一个类A的指针即可,A负责对外提供接口控制actor的行为。
贴个图片
为了方便控制,类A(SlaveNode 最好好把actor作为自己的成员变量,不然使用的时候会不方便,用了就知道,你懂得。)
之后又试了一下,其实可以把上面生成scoped_actor 去掉,
直接用
这样也是可以的,功能都是一样的。(之前有些粗糙误导了)
最后弱弱的说一句,求互粉阿!
CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)的更多相关文章
- CAF(C++ actor framework)使用随笔(send sync_send)(二)
a). 发完就忘, 就像上面anon_send 以及send #include <iostream> #include "caf/all.hpp" #include & ...
- 在 .NET Framework 中使用 StringBuilder 类
在 .NET Framework 中使用 StringBuilder 类 String 对象是不可变的.每次使用 System.String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就 ...
- EF(Entity Framework)通用DBHelper通用类,增删改查以及列表
其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo& ...
- 【外文翻译】使用Timer类去调度任务 ——java
使用Timer类去调度任务 --java 原文地址:https://dzone.com/articles/using-timer-class-to-schedule-tasks 原文作者:Jay Sr ...
- 从零开始开发一个简易的类vue-cli构建工具
代码地址:https://github.com/cheer4chai/webpack-learning 仿照vue-cli开发这个工具的目的是了解webpack的基本设置,以及vue-cli的工作原理 ...
- 【mybatis】idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin
idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin,名字可能叫Free mybatis-plugin 安装上之后,可能需要重启ide ...
- java关于类的构建
一开始老是把类的构建和代码的重构搞的混淆,现在理解的可能还好点(至少概念上不会出错了),简单的说类就是一个复杂的变量,这个变量里面含有属性.方法和构造方法,注意方法和构造方法是完全不同的两个概念,而且 ...
- 深入解析Windows窗口创建和消息分发(三个核心问题:怎么将不同的窗口过程勾到一起,将不同的hwnd消息分发给对应的CWnd类去处理,CWnd如何简单有效的去处理消息,由浅入深,非常清楚) good
笔记:争取不用看下面的内容,只看自己的笔记,就能记住这个流程,就算明白了: _tWinMain-->AfxWinMain,它调用四个函数: -->AfxWinInit用于做一些框架的初始化 ...
- JSON工具类的构建(后端版本)
前言 在前后端交互的选择上,之前一直采用的是模板引擎(因为我只负责后端). 而这次的一个算是作业吧,前后端都是我,所以就研究了一下JSON交互在java web的应用(主要是前端). 优缺点 前后端耦 ...
随机推荐
- Codeforces Gym 100342E Problem E. Minima 暴力
Problem E. MinimaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attac ...
- 模式识别 - 处理多演示样例学习(MIL)特征(matlab)
处理多演示样例学习(MIL)特征(matlab) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27206325 多演示样例学习( ...
- c#智能感知(设置)及实现
1) 使用工具->选项菜单命令,选择文本编辑器->C#设置, 将上面圈出的2个复选框(自动列出成员和参数信息)打勾, 然后 Intellisense就会工作了.(如果没这么多选项,请勾选S ...
- day06 Java基础
1.二维数组格式一(列固定):数据类型[][] 变量名=new 数据类型[m][n]; 二维数组格式二(列变化):数据类型[][] 变量名=new 数据类型[m][]; 二维数组格式三:数据类型[][ ...
- 新浪云(SAE)使用没有内置的django版本
SAE自带的django目前到1.5版本,如果要使用更高的版本,则需要把django包同代码一起上传. 以1.7.3为例 先从SAE svn签出代码,默认1是根目录 1. 1目录下创建文件夹 sit ...
- win7家庭版任务栏预览消失,只显文字终极解决法
出现问题:win7家庭基础版,任务栏的预览窗口没有了,只有文字: Likethis: 工具/原料 services.msc 方法/步骤 网上的解决办法都试了,不管用,先把网上的方法列举出来如下 ...
- super 和this的用法
class Person { public static void prt(String s) { System.out.println(s); // 打印出来结果 } Person() { prt( ...
- Java中数组的快排
描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成, ...
- 从wordcount 开始 mapreduce (C++\hadoop streaming模式)
序:终于开始接触hadoop了,从wordcount开始 1. 采用hadoop streamming模式 优点:支持C++ pathon shell 等多种语言,学习成本较低,不需要了解hadoop ...
- GCD 的使用
// // ZYGCDViewController.h // Thread // // Created by wanglixing on 14/11/4. // Copyright © 2014年 z ...