CAF(C++ actor framework)使用随笔(各种send通信用法)
Posted 浙江小麦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAF(C++ actor framework)使用随笔(各种send通信用法)相关的知识,希望对你有一定的参考价值。
c). 同步发送, 等待响应, 超时后收到1个系统消息.
贴上代码
#include <iostream> #include "caf/all.hpp" #include "caf/io/all.hpp" #include <string> #include <thread> #include <chrono> #include <unistd.h> using namespace std; using namespace caf; behavior fun(event_based_actor* self){ return { [self](const string& str, const actor &buddy)->string { aout(self)<<str<<endl; //self->delayed_send(buddy,std::chrono::milliseconds(10),"I‘m lated"); //std::this_thread::sleep_for(std::chrono::seconds(1)); //usleep(10000); while(1); return "log"; self->quit(); } }; } void fun1(event_based_actor* self, const actor &buddy){ self->sync_send(buddy,"hi!",self).then( [=](const string& str) { aout(self)<<str<<endl; }, after(std::chrono::milliseconds(1))>>[&](){ aout(self)<<"timeout!"<<endl; } ); aout(self)<<"i‘m not waiting for you!"<<endl; } int main(){ auto actor1 = spawn(fun); auto actor2 = spawn(fun1,actor1); caf::await_all_actors_done(); shutdown(); return 0; }
其中自己试了几种线程休息的几种方法,发现usleep和 C++11自己提供的线程休眠库会导致coredump并且输出一堆东西,可能是caf自己的东西没有去深究等,
还有就是delay_send我也一开始有点傻,想用delay_send去回复发过来的消息,所以传入了actor,但是要搞清楚“发送”和“回复”是两种东西,你不能用发送来回复,只能用return来回复
d). 同步发送, 同步等待. 适用阻塞的actor api.
#include <iostream> #include "caf/all.hpp" #include "caf/io/all.hpp" #include <string> #include <chrono> using namespace std; using namespace caf; behavior fun(event_based_actor* self){ return { [self](const string& str)->string { aout(self)<<str<<endl; return "I got it."; //self->quit(); } }; } void fun1(blocking_actor* self, actor buddy){ self->sync_send(buddy,"hi!").await( [=](const string& str) { aout(self)<<str<<endl; }, after(std::chrono::milliseconds(1))>>[&](){ aout(self)<<"timeout!"<<endl; } ); aout(self)<<"i‘m not waiting for you!"<<endl; } int main(){ auto actor1 = spawn(fun); auto actor2 = spawn<blocking_api>(fun1,actor1); caf::await_all_actors_done(); shutdown(); return 0; }
结果(顺序变了)为
唯一修改就是spawn那边加上类型。
自己写了一个很简陋的聊天 传文件的程序,有兴趣可以看一下,维护好友列表,心跳机制都是用caf实现,当时没有用caf的序列话 用的是boost库的。
https://github.com/zhejiangxiaomai/chat
以上是关于CAF(C++ actor framework)使用随笔(各种send通信用法)的主要内容,如果未能解决你的问题,请参考以下文章
CAF(C++ actor framework)使用随笔(各种send通信用法)
C++ Actor并发模型框架 Actor Framework (CAF)
CAF(C++ actor framework)使用随笔(延迟发送,消息转发,消息优先级)
CAF(C++ actor framework)(序列化之类,无需序列化,直接传)