当前位置: 首页 > news >正文

erlang学习:用OTP构建系统1

书上案例学习并测试

23.1 通用事件处理

-module(event_handler).
%% API
-export([make/1, add_handler/2, event/2]).%% 制作一个“什么都不干”的事件处理器Name(一个原子)。这样消息就有地方发送了。
make(Name) ->register(Name, spawn(fun() -> my_handler(fun no_op/1) end)).%% 给名为Name的事件处理器添加一个处理函数Fun。这样当事件X发生时,事件处理器就会执行Fun(X)。
add_handler(Name, Fun) -> Name ! {add, Fun}.%% 发送消息X到名为Name的事件处理器。
event(Name, X) -> Name ! {event, X}.my_handler(Fun) ->receive{add, Fun1} ->my_handler(Fun1);{event, Any} ->(catch Fun(Any)),my_handler(Fun)end.
no_op(_) -> void.

运行结果
请添加图片描述
如果需要使用事件处理器进行事件处理,需要重新写一个事件处理器回调模块。

-module(motor_controller).%% API
-export([add_event_handler/0]).add_event_handler() ->event_handler:add_handler(error, fun controller/1).%%接收到的为too_hot则调用上方函数,否则调用下方
controller(too_hot) ->io:format("Turn off the motor~n");
controller(X) ->io:format("~w ignored event: ~p~n", [?MODULE, X]).

输出结果为请添加图片描述

请添加图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 单链表——随机链表的复制
  • Mask R-CNN论文原理讲解
  • 【C#】静态成员(static)与实例成员(非静态成员)的理解
  • macos USB外接键盘ctrl键绑定方法 解决外接USB键盘与mac键盘不一致问题
  • JVM【面试题】2024最新
  • 【C++ | 设计模式】工厂方法模式的详解与实现
  • Kompose工具:转换Compose项目为K8S项目
  • 深度强化学习算法(三)(附带MATLAB程序)
  • priority_queue模拟
  • 【动态规划】区间dp
  • 通过SynchronousQueue方式实现线程间数据传递
  • 算法笔记|Day37动态规划X
  • Websocket笔记
  • Tarjan的脱机最小公共祖先算法详解
  • Linux 数据结构 内核链表 栈
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【comparator, comparable】小总结
  • codis proxy处理流程
  • echarts花样作死的坑
  • ESLint简单操作
  • HTML5新特性总结
  • IOS评论框不贴底(ios12新bug)
  • JavaScript 基础知识 - 入门篇(一)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Laravel 菜鸟晋级之路
  • Promise面试题2实现异步串行执行
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • v-if和v-for连用出现的问题
  • Zsh 开发指南(第十四篇 文件读写)
  • 关于for循环的简单归纳
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 组复制官方翻译九、Group Replication Technical Details
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​Spring Boot 分片上传文件
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.ajax,axios,fetch三种ajax请求的区别
  • (04)odoo视图操作
  • (30)数组元素和与数字和的绝对差
  • (C语言)fread与fwrite详解
  • (pojstep1.3.1)1017(构造法模拟)
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (十八)三元表达式和列表解析
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)【Hibernate总结系列】使用举例
  • (转)jQuery 基础
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验