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();
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())>>[&](){
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 ;
}

其中自己试了几种线程休息的几种方法,发现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())>>[&](){
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 ;
}

结果(顺序变了)为

唯一修改就是spawn那边加上类型。

自己写了一个很简陋的聊天 传文件的程序,有兴趣可以看一下,维护好友列表,心跳机制都是用caf实现,当时没有用caf的序列话 用的是boost库的。

https://github.com/zhejiangxiaomai/chat

CAF(C++ actor framework)使用随笔(同步发送 异步与同步等待)(三)的更多相关文章

  1. ajax中的async属性值之同步和异步及同步和异步区别

    jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里 ...

  2. C# 异步转同步

    当我们的程序运行时,调用了一段异步的逻辑A,这段异步的逻辑无法转化为同步(如动画.下载进度等) 而,我们又需要等待异步逻辑A处理完成,然后再执行其它逻辑B. 那就迫切需要将异步转同步了! //参数bo ...

  3. python全栈开发day31-操作系统介绍,异步、同步、阻塞、非阻塞,进程

    一.网络编程内容回顾 1.arp协议 #交换机 #广播.单播 2.ip协议 3.tcp和udp协议 tcp:可靠的,面向连接的,字节流传输,长连接 三次握手:一方发送请求,另一方确认请求同时发送请求, ...

  4. net 异步与同步

    一.摘论 为什么不是摘要呢?其实这个是我个人的想法,其实很多人在谈论异步与同步的时候都忽略了,同步异步不是软件的原理,其本身是计算机的原理及概念,这里就不过多的阐述计算机原理了.在学习同步与异步之前, ...

  5. 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步

    深入理解MVC   MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...

  6. input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has

    input屏蔽历史记录   设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处   ;(function($){$.ex ...

  7. C# 同步转异步 AutoResetEvent

    当我们的程序运行时,调用了一段异步的逻辑A,这段异步的逻辑无法转化为同步(如动画.下载进度等) 而,我们又需要等待异步逻辑A处理完成,然后再执行其它逻辑B. AutoResetEvent 同步转异步 ...

  8. day37——阻塞、非阻塞、同步、异步

    day37 阻塞.非阻塞.同步.异步 进程运行的三个状态:运行.就绪.阻塞 执行的角度 阻塞:程序运行时,遇到了IO,程序挂起,CPU被切走 非阻塞:程序没有遇到IO,程序遇到IO但是我通过某种手段, ...

  9. [转帖]再谈IO的异步,同步,阻塞和非阻塞

    再谈IO的异步,同步,阻塞和非阻塞 https://yq.aliyun.com/articles/53674?spm=a2c4e.11155435.0.0.48bfe8efHUE8wg   krypt ...

随机推荐

  1. URAL 1779 F - The Great Team 构造

    F - The Great TeamTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest ...

  2. 如何防止ListView控件闪烁

    如何防止ListView控件闪烁 beginupdate()和endupdate()之间写代码   ListView1.Items.BeginUpdate;ListView1.Items.Add('A ...

  3. 改进uboot,添加自定义快捷菜单

    .在common目录下新增cmd_menu.c文件,内容为: #include<common.h> #include<command.h> #ifdef CONFIG_MENU ...

  4. 算法入门系列一--DP初步

    数字三角形(数塔问题) 其实动态规划本身并不是一个特定的算法,是一种用途广泛的问题求解方法,一种思想,一种手段. 1.1问题描述与状态定义 有一个有非负整数组成的三角形,第一行一个数字,下面各行除了最 ...

  5. CAShapeLayer和CAGradientLayer

    两个动画效果来了解一下CALayer的两个重要的subClass,CAGradientLayer和CAShapeLayer. 微视录制视频的时候那个进度效果和Spark相机类似,但是个人还是比较喜欢S ...

  6. iOS开发——网络编程Swift篇&(六)异步Post方式

    异步Post方式 // MARK: - 异步Post方式 func asynchronousPost() { //创建NSURL对象 var url:NSURL! = NSURL(string: &q ...

  7. debian下Vnc

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

  8. WORD神操作!第一个技巧你就傻眼了!

    原文:http://mp.weixin.qq.com/s?__biz=MzA4NzkyMDIwNw==&mid=220128483&idx=4&sn=cfa87c941f36f ...

  9. 百度API_Demo

    package com.test.www; import java.io.BufferedReader; import java.io.IOException; import java.io.Inpu ...

  10. 完全自定义 TabBar

    // // CustomTabBarController.h // Dream // // Created by mac on 14-10-17. // Copyright (c) 2014年 HM. ...