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

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]).

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

请添加图片描述


http://www.kler.cn/a/285100.html

相关文章:

  • Qt 编写插件plugin,支持接口定义信号
  • R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP
  • 移门缓冲支架的作用与优势
  • nuxt3添加wowjs动效
  • MFC图形函数学习07——画扇形函数
  • WPF在MVVM模式下怎么实现导航功能
  • Java算法之堆排序(Heap Sort)
  • 【软考】路由器
  • C++ 移动构造函数为什么设置noexcept?
  • python网络爬虫(零)——认识网页结构
  • Linux主机网络参数的设置—IP地址的作用和类型
  • LabVIEW呼吸机测试系统开发
  • sqli-labs靶场通关攻略(五十一到五十六关)
  • 【c++】日期类相关实践:计算日期到天数转换、日期差值
  • 如何打造免费体育馆场地预约系统?php vue技术实现,简易操作指南
  • Veeam Data Platform 12.2 发布下载,新增功能概览
  • K8S(Kubernates) 知识目录
  • Redis缓存的一些案例
  • 带权重的随机算法
  • 机械学习—零基础学习日志(概率论总笔记1)
  • DRF——serializer中获取嵌套评论
  • 鸿蒙HarmonyOS之使用preferences首选项保存获取数据
  • 1、Java简介+DOS命令+java的编译运行(字节码/机器码、JRE/JVM/JDK的区别)+一个简单的Java程序
  • Linux 数据结构 树知识
  • shell小白学习记录
  • 如何将线程绑定到特定的CPU核